Deploy spark, pytorch, fastapi lên docker
Cho mình hỏi là mình có dự án sử model face recognition để trích xuất đặc trưng của ảnh, sau đó sẽ dùng đặc trưng trích xuất được truy vấn thông tin bằng model LSH với pyspark. Mình sẽ sử dụng fastapi để tạo api nhận ảnh đầu vào và trả ra kết quả truy vấn được. Mình muốn deploy các phần trên vào một docker container thì có được không ạ
Trích xuất dữ liệu trên CCCD không gắn chip
Hiện tại mình đang làm về trích xuất dữ liệu trên căn cước công dân , trong hướng dẫn <a href="https://viblo.asia/p/trich-xuat-thong-tin-tu-chung-minh-thu-bJzKmaRwK9N?fbclid=IwAR3TJrh43NOvV4_70rEnOaUch3W8aRGIKEx9MNqSSFcbnSylCxPbiiSQ1dU#_21-detect-4-goc-chung-minh-thu-2 " target="_blank">https://viblo.asia/p/trich-xuat-thong-tin-tu-chung-minh-thu-bJzKmaRwK9N?fbclid=IwAR3TJrh43NOvV4_70rEnOaUch3W8aRGIKEx9MNqSSFcbnSylCxPbiiSQ1dU#_21-detect-4-goc-chung-minh-thu-2 </a> , có hướng dẫn Detect 4 góc căn cước, mình chưa hiểu về đoạn " sử dụng mô hình của bản thân ,với mô hình detect đã được cung cấn sẵn bởi Tensorflow API" nhờ bạn hướng dẫn giúp ạ. Dưới đây là code import trực tiếp thừ file mình chụp <p>
import cv2
</p>
<p>
import pytesseract
</p>
<p>
def extract_id_card_info(image_path):
</p>
<p>
image = cv2.imread(image_path)
</p>
<p>
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
</p>
<h1>Vùng chứa Số CCCD</h1>
number_roi = image[210:270, 500:960]<p>
number_text = extract_text_from_image(number_roi)
</p>
<p>
print("Số CCCD:", number_text)
</p>
<h1>Vùng chứa tên</h1>
name_roi = image[290:350, 520:1000]<p>
name_text = extract_text_from_image(name_roi)
</p>
<p>
print("Tên:", name_text)
</p>
<h1>Vùng chứa ngày sinh</h1>
birthdate_roi = image[350:430, 665:900]<p>
birthdate_text = extract_text_from_image(birthdate_roi)
</p>
<p>
print("Ngày sinh:", birthdate_text)
</p>
<h1>Vùng chứa giới tính</h1>
gender_roi = image[435:480, 490:660]<p>
gender_text = extract_text_from_image(gender_roi)
</p>
<p>
print("Giới tính:", gender_text)
</p>
<h1>Vùng chứa quốc tịch</h1>
nationality_roi = image[435:480, 790:1000]<p>
nationality_text = extract_text_from_image(nationality_roi)
</p>
<p>
print("Quốc tịch:", nationality_text)
</p>
<h1>Vùng chứa quê quán</h1>
hometown_roi = image[490:545, 520:1200]hometown_text = extract_text_from_image(hometown_roi)<p>
print("Quê quán:", hometown_text)
</p>
<h1>Vùng chứa nơi cư trú</h1>
address_roi = image[575:635, 565:1200]<p>
address_text = extract_text_from_image(address_roi)
</p>
<p>
print("Nơi cư trú:", address_text)
</p>
<h1>Vùng chứa ngày hết hạn</h1>
expiration_date_roi = image[655:705, 220:410]<p>
expiration_date_text = extract_text_from_image(expiration_date_roi)
</p>
<p>
print("Ngày hết hạn:", expiration_date_text)
</p>
<p>
def extract_text_from_image(image):
</p>
<p>
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
</p>
<p>
text = pytesseract.image_to_string(gray, lang='vie+eng')
</p>
<p>
return text
</p>
<p>
image_path = r"C:UsersadminDesktopcccm1.jpg"
</p>
<p>
extract_id_card_info(image_path)
</p>
Đọc mã QR trên CCCD
import cv2 <p>
import numpy as np
</p>
<p>
from pyzbar.pyzbar import decode
</p>
<p>
import tkinter.messagebox as msgbox
</p>
<p>
import tkinter as tk
</p>
<p>
cap = cv2.VideoCapture(0)
</p>
<p>
root = tk.Tk()
</p>
<p>
root.title("QR_CODE")
</p>
<p>
decoded_label_widget = tk.Label(root, text="")
</p>
<p>
decoded_label_widget.grid(row=0, column=0)
</p>
<p>
decoded_entry_widget = tk.Entry(root, state="readonly", font=("Arial", 12), width=60, highlightthickness=0, bd=0)
</p>
<p>
decoded_entry_widget.grid(row=0, column=1, pady=10)
</p>
<p>
flag_camera = True
</p>
<p>
def toggle_display():
</p>
<p>
global flag_camera
</p>
<p>
flag_camera = not flag_camera
</p>
<p>
toggle_button = tk.Button(root, text="Bật-Tắt-Cam", command=toggle_display)
</p>
<p>
toggle_button.grid(row=0, column=2, padx=10)
</p>
<p>
def copy_all():
</p>
<p>
root.clipboard_clear()
</p>
<p>
root.clipboard_append(decoded_entry_widget.get())
</p>
<p>
copy_button = tk.Button(root, text="Sao Chép", command=copy_all)
</p>
<p>
copy_button.grid(row=0, column=3, padx=10)
</p>
<p>
if not cap.isOpened():
</p>
<p>
msgbox.showwarning("Cảnh báo", "Không thể mở camera. Vui lòng kiểm tra lại!")
</p>
<p>
flag_camera = False
</p>
<p>
while True:
</p>
<p>
if flag_camera:
</p>
<p>
_, frame = cap.read()
</p>
<p>
frame = cv2.resize(frame, None, fx=1.3, fy=1.3, interpolation=cv2.INTER_LINEAR)
</p>
<p>
frame = cv2.convertScaleAbs(frame, alpha=3, beta=20)
</p>
<p>
decodedObjects = decode(frame)
</p>
<p>
decoded_data = [obj.data.decode("utf-8") for obj in decodedObjects]
</p>
<p>
for obj in decodedObjects:
</p>
<p>
x, y, w, h = obj.rect.left, obj.rect.top, obj.rect.width, obj.rect.height
</p>
<p>
cx, cy = x + w/2, y + h/2
</p>
<p>
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
</p>
<p>
cv2.line(frame, (int(cx), y), (int(cx), y + h), (0, 255, 0), 2)
</p>
<p>
cv2.line(frame, (x, int(cy)), (x + w, int(cy)), (0, 255, 0), 2)
</p>
<p>
if len(decoded_data) > 0:
</p>
<p>
decoded_text = "n".join(decoded_data)
</p>
<p>
decoded_entry_widget.delete(0, tk.END)
</p>
<p>
decoded_entry_widget.insert(tk.END, decoded_text)
</p>
<p>
decoded_entry_widget.configure(state="normal")
</p>
<p>
decoded_label_widget.configure(text="")
</p>
<p>
else:
</p>
<p>
decoded_label_widget.configure(text="")
</p>
<p>
cv2.imshow("QR Code Scanner", frame)
</p>
<p>
if cv2.waitKey(1) & 0xFF == ord('q'):
</p>
<p>
break
</p>
<p>
if cv2.getWindowProperty("QR Code Scanner", cv2.WND_PROP_VISIBLE) < 1:
</p>
<p>
break
</p>
<p>
else:
</p>
<p>
decoded_entry_widget.configure(state="normal")
</p>
<p>
decoded_label_widget.configure(text="")
</p>
<p>
cv2.destroyAllWindows()
</p>
<p>
root.update()
</p>
<p>
root.update()
</p>
<p>
cap.release()
</p>
<p>
cv2.destroyAllWindows()
</p>
<p>
Mình có đoạn code scan mã qr trên CCCD nhưng hiện tại đọc nó rất lâu tầm, mình cũng đã kết nối vơi cam iphone bằng ivcam cũng vậy, Nhờ mọi người xem giúp chỉnh ở đâu ạ
</p>
<p>
Mình cảm ơn
</p>
Làm thế nào để unsubscribe email
Chào anh Dũng và mọi người,
<p>
</p>
<p>
Em đang nghiên cứu làm chức năng unsubscribe email
</p>
<p>
</p>
<p>
Sau khi xem qua tính năng này ở một số website thì unsubscribe url sẽ có path chứa 1 chuỗi các kí tự random.
</p>
<p>
</p>
<p>
Vì vậy, em dự định sẽ encode/decode user pk sang uid string để identify người dùng khi họ request to unsubscribe.
</p>
<p>
</p>
<p>
Em ko rõ liệu như vậy đã an toàn hay chưa (1) ? vì em có liên hệ sang tính năng password reset thì 1 vài open-source project dùng kết hợp uid-token. Phần token ấy em chưa hiểu rõ mục đích của nó nên k có ý định sử dụng (2)
</p>
<p>
</p>
<p>
Rất mong anh Dũng và mọi người giải đáp giúp e 2 vấn đề trên ạ. Em cảm ơn
</p>
Lưu trữ text with formatting trong database
Chào anh Dũng,
<p>
</p>
<p>
Hiện tại em đang làm 1 project mà ở đó người dùng có thể soạn văn bản kèm format (in đậm, in nghiêng, hyperlink, hình ảnh v.v...) để gửi mail.
</p>
<p>
</p>
<p>
Trong project có tính năng là người dùng có thể tuỳ chỉnh signature của họ (tương tự signature của gmail, nằm cuối cùng trong 1 nội dung mail).
</p>
<p>
</p>
<p>
Hiện em ko chắc mình sẽ lưu signature này như thế nào. Theo suy nghĩ của em là phía frontend sẽ dùng 1 markup language (như markdown) để convert các định dạng (in nghiêng, in đậm, hyperlink) để trở thành 1 chuỗi string thuần.
</p>
<p>
</p>
<p>
Vì vậy em có hỏi cấp trên (TA) là system sẽ dùng markup language gì để khi nhận đc input từ frontend, backend sẽ biết đc đó là định dạng gì (thay vì ghi nhận là các kí tự đặc biệt).
</p>
<p>
Phía backend cũng cần biết vì có những tính năng backend sẽ trực tiếp gửi mail đến người dùng ạ (ví dụ reset password)
</p>
<p>
</p>
<p>
Sau khi hỏi thì TA có bảo em là cứ lưu nguyên HTML code mà k cần convert gì hết. Em nghe thấy lấn cấn nhưng cũng k có lí do gì để phản biện lại. Nên trước mắt e vẫn làm theo yêu cầu đấy.
</p>
<p>
Xin anh Dũng cho em lời giải ạ.
</p>
Cách xử lí exception trả về từ 3rd-party library
Chào anh Dũng và mọi người
<p>
</p>
<p>
Em đang thực hiện task: tích hợp <a href="https://www.twilio.com/">Twilio</a> vào dự án backend của công ty.
</p>
<p>
</p>
<p>
Em định nghĩa 1 class tên MessageClient trong <code>Service layer</code> như sau:
</p>
<p>
</p>
<pre>
import TwilioClient
class MessageClient:
def __init__(self):
self.twilio_client = TwilioClient(twilio_account_sid, twilio_auth_token)
def send_message(body, from, to):
self.twilio_client.send_message(body, from, to)
</pre>
<p>
</p>
<p>
send_message có thể successful hoặc failed, nếu fail <code>twilio</code> sẽ raise exception, em đang phân vân liệu mình sẽ handle exception trong service layer hay trong view (API) layer?
</p>
<p>
</p>
<p>
Mong anh giải đáp giúp !
</p>
<p>
Em cảm ơn ạ.
</p>
có nên định hướng học thêm machine learning
Em thấy công việc hằng ngày trên công ty của em chỉ là viết API CRUD cho DB, viết swagger. Thật sự công việc rất chán. Em có nên thử sức ở ngành Machine learning k ạ, hồi em còn học BK em là sinh viên khá toán. Nhưng em lo rằng nhu cầu việc ML k cao như Java em đang làm. Ai đi làm cũng cần đồng lương, sau này em còn lo vợ con, bố mẹ nữa nên cũng lo lắng lắm.
So sánh xâu tiếng việt
Chào mọi người, trong quá trình xử lý text, đọc và so sánh chuỗi thì mình gặp vấn đề như sau : có 2 string nhìn bằng mắt thường thì giống nhau, nhưng khi encode sang utf-8 thì nó cho ra 2 chuỗi binary khác nhau ,ví dụ trên python 3:
<p>
</p>
<p>
s1 = 'Nguyễn Đình Bách'
</p>
<p>
</p>
<p>
s1.encode('utf-8') = b'Nguyxc3xaaxccx83n xc4x90ixccx80nh Baxccx81ch'
</p>
<p>
</p>
<p>
s2 = 'Nguyễn Đình Bách'
</p>
<p>
</p>
<p>
s2.encode('utf-8') = b'Nguyxe1xbbx85n xc4x90xc3xacnh Bxc3xa1ch'
</p>
<p>
</p>
<p>
Nên s1 == s2 sẽ cho ra False. Vậy mình muốn hỏi với những string về mắt thường nhìn giống nhau nhưng encode khác nhau như trên thì có cách nào xử lý để phép so sánh s1_daxuly == s2_daxuly ra kết quả là True không.
</p>
<p>
</p>
<img class="alignnone size-full wp-image-1224" src="https://stackask.com/wp-content/uploads/2021/09/encode_tiengviet.png" alt="" />
<p>
</p>
<p>
Cám ơn mọi người đã đọc bài.
</p>