Hi mọi người , mấy bửa nay có chút việc nên chưa đăng bài được , nay mình trở lại và giới thiệu 1 project kha khá đó là nhận diện vật thể realtime qua Webcam của máy đính với python thư viện opencv .Project này mình sẽ dử dụng lại model train sẵn (SSD – MobileNet) . Bài tới mình sẽ hướng dẫn các bạn sử dụng yolov3.

I . Chuẩn bị

  • Tạo môi trường làm việc mới trên anaconda và cài 1 số thư viện cần thiết với lệnh trên cmd :
conda create --name detect_realtime 
conda activate detect_realtime
pip install opencv-python
cài opencv
  • Tiếp theo , các bạn clone github của mình VÀ chuyển tới thư mục hongtin_detect_realtime với lệnh trên cmd:
git clone https://github.com/sonrasa2k/hongtin_detect_realtime
cd hongtin_detect_realtime
Chuyển thư mục

II. Tiến Hành

  • Các bạn mở thư mục hongtin_detect_realtime trong Visual Studio Code và xem lại code 1 xíu nhé !
  • Đầu tiên là file coco.name , file này chứa tên các vật thể có thể phát hiện :
file coco.name
  • Tiếp đến là file ssd_mobilenet_v3 là file weights đã train sẵn bằng caffee :
file ssd
  • Cuối cùng là file detect.py file cần chạy để detect realtime :
file detect.py
  • Trong file detect.py các bạn cần chú ý vài dòng sau :
    • Đầu tiên chúng ta cần cần 1 list các tên vật thể lưu vào 1 biến . Bằng cách đọc file coco.name .
classNames= []
classFile = 'coco.names'
 
with open(classFile,'rt') as f:
 #đọc file
    classNames = f.read().rstrip('\n').split('\n')
#và lưu vào biến nếu phát hiện xuống dòng
  • Tiếp theo chúng ta cần load model vào 1 biết tên net và set đầu vào của ảnh cần detect là 320×320 :
net = cv2.dnn_DetectionModel(weightsPath,configPath)
#load model
net.setInputSize(320,320) #cai dat input dau vao la 320,320
  • Tìm ra các hộp chứa vật thể và tỷ lệ dự đoán của vật thể :
indices = cv2.dnn.NMSBoxes(bbox,confs,thres,nms_threshold)
  • Sau đó tiến hành vẽ từng hộp :
for i in indices:
        i = i[0]
        box = bbox[i]
        x,y,w,h = box[0],box[1],box[2],box[3]
        cv2.rectangle(img, (x,y),(x+w,h+y), color=(0, 255, 0), thickness=2)
        cv2.putText(img,classNames[classIds[i][0]-1].upper(),(box[0]+10,box[1]+30),
                    cv2.FONT_HERSHEY_COMPLEX,1,(0,255,0),2)
  • Sơ sơ là vậy thôi , bây giờ các bạn chạy và xem kết quả nhé ! . Các bạn chuyển qua cmd đã chuẩn bị và chạy với lệnh “python detect.py“:
Kết quả chương trình

Như vậy là xong project rồi nhé ! Đơn giản phải không nào !

III . Kết Luận

  • Chúng ta đã hoàn thành xong project nhận diện vật thể real time rồi , các bạn xem thật kỹ và rút ra bài học ở đây nhé !
  • Phần sau mình sẽ hướng dẫn detect bằng Yolo với opencv , và tiếp theo nữa có thể là cách train yolo để detect vật thể đặt thù luôn . Trước mắt cứ chạy cái của người ta đã.