[YOLO Series] #1 – Sử dụng Yolo để nhận dạng đối tượng trong ảnh

Xin chào các bạn, thi thoảng xem phim nước ngoài, các bạn hay thấy cái hình ảnh kiểu object detection, nhìn qua một cái kính là có thể biết được kia là cái gì, đây là cái gì kèm theo thông số như: level, cân nặng, sức khỏe, màu còn lại…. Bây giờ thì AI, Computer Vision cũng có thể làm được việc đó rồi. Hôm nay chúng ta sẽ cùng thử sử dụng YOLO để nhận dạng đối tượng trong 1 ảnh nhé. Khác với các bài viết trên mạng, viết qua loa nên khi triển khai các bạn sẽ rất vất vả, mình sẽ viết thật chi tiết cho các bạn tiện triển khai (vì ngày xưa mình cũng khá vất vả khi mày mò với mấy cái bài trên mạng).

Chuẩn bị ảnh để nhận dạng

Để cho nó có tính thời sự, mình sẽ lấy một ảnh thật, chụp từ camera hành trình tại Việt Nam nhé.

sử dụng YOLO

Chuẩn bị công cụ nhận dạng – Yolo

Đoạn này mình nói qua về cái Yolo nhé. Tìm hiểu về cái này một cách học thuật thì lằng nhằng lắm, nhưng blog này là Mì AI nên mình sẽ tìm hiểu theo cách Mì Ăn Liền nhé. Nói chung thì YOLO là một cái model để phát hiển các đối tượng trong ảnh với cách cực nhanh và gọn và chạy được trên nhiều môi trường khác nhau với cấu hình khác nhau (nó viết tắt của You Only Look Once, chỉ áp model lên ảnh 1 lần nên nó nhanh là vì thế).

YOLO hiện đã đến version 3 rồi, anh em Mì AI thì cứ lấy phiên bản cao nhất mà chơi, tội dzè. Thôi, nói vậy đủ rồi, bây giờ bắt tay từng bước nhé.

  1. Tạo một thư mục trên ổ cứng và đặt tên là MiAI_Yolo_1 nhé. Vì mình còn nhiều bài nên đặt tên thế cho đỡ nhầm.
  2. Cài đặt Python trên máy tính nhé. Cái này thì tùy các bạn dùng Window hay MacOS thì cách cài sẽ khác nhau. Các bạn tham khảo cách cài tại đây: https://quantrimang.com/cach-cai-dat-python-tren-windows-macos-linux-140625
  3. Cài đặt các thư viện cần thiết nhé. Các bạn cứ mở Command prompt hoặc Terminal ra chạy lần lượt các lệnh sau để cài:
    pip install opencv-python
    pip install numpy
  4. Rồi, bây giờ chúng ta sẽ tải về các file cần thiết nhé. Mình có publish một git tại đây https://github.com/thangnch/yolo_beginner . Các bạn tải toàn bộ các file về thư mục MiAI_Yolo_1 nhé (các file quan trọng là: yolov3.cfg, yolov3.txt và file mã nguồn YOLO.py).
  5. YOLO dã được train với rất nhiều ảnh thuộc nhiều class khác nhau, ta tải về và sử dụng nhé. Cách train thêm dữ liệu riêng se nói đến trong các bài sau. Ta tải weight của pretrain model tại đây https://pjreddie.com/media/files/yolov3.weights và để vào thư mục MiAI_Yolo_1 nhé.

Tận hưởng thành quả

Xong rồi, bây giờ các bạn mở Command Prompt hoặc Terminal lên và chuyển vào thư mục MiAI_Yolo_1 bằng lệnh cd nhé. Sau đó chạy tiếp lệnh:

python YOLO.py -i cam2.jpg -cl yolov3.txt -w yolov3.weights -c yolov3.cfg

Trong dó :

  • cam2.jpg: là tên file ảnh bạn muốn nhận dạng, bạn có thể thay bằng ảnh nào tùy thích.
  • yolov3.txt: Là file chứa tên của các đối tượng phát hiện được.
  • yolov3.weights: Là file pretrain weights nhé.
  • yolov3.cfg: Là file config của YOLO.

Nếu mọi thứ okie, bạn sẽ nhận được một cái ảnh detect và đầy đủ các box như sau:

sử dụng YOLO

Nhận dạng khá chuẩn với các phương tiện ở Việt Nam. Bạn có thể thử với nhiều ảnh khác nữa như đồ vật, con vật,… nhé.

Như vậy, đến đây chúng ta đã có thể dạy cho máy tính nhận dạng các vật thể trong ảnh. Trong các bài tiếp thuộc YOLO series này, các bạn sẽ biết cách train và nhận dạng các đối tượng đặc thù phục vụ bài toán riêng nhé.

Thân ái chào các bạn!

Chiến Thắng

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: http://ainoodle.tech
Youtube: http://bit.ly/miaiyoutube

mm
Nguyễn Chiến Thắng

Một người đam mê những điều mới mẻ và công nghệ hiện đại. Uớc mơ cháy bỏng dùng AI, ML để làm cho cuộc sống tốt đẹp hơn! Liên hệ: thangnch@gmail.com hoặc facebook.com/thangnch

Related Post

30 Replies to “[YOLO Series] #1 – Sử dụng Yolo để nhận dạng đối tượng trong ảnh”

  1. python YOLO.py -i cam2.png -cl yolov3.txt -w yolov3.weights -c yolov3.cfg
    đoạn này anh bị nhầm, trong thư mục không có file cam2.png (chỉ có cam1.png, cam2.jpg, cam3.jpeg, dog.jpg, object-detection.jpg). :v

    Cảm ơn anh về bài viết.

    1. em đã tải đầy đủ các file và cho hết vào 1 thư mục nhưng khi chạy YOLY.py thì nó ra lỗi thế này ạ:
      Traceback (most recent call last):
      File “YOLO.py”, line 96, in
      draw_prediction(image, class_ids[i], confidences[i], round(x), round(y), round(x + w), round(y + h))
      File “YOLO.py”, line 37, in draw_prediction
      cv2.rectangle(img, (x, y), (x_plus_w, y_plus_h), color, 2)
      TypeError: integer argument expected, got float
      Hiện tại em đang sử dụng Opencv 3.4.2

      1. sau khi em chuyển tất cả các tham số x y thành int(x) int (y) lại chạy đc rồi. Cơ mà thay đổi như vậy thì có ảnh hưởng gì không?

  2. anh ơi loạt bài này có theo thứ tự từ dễ tới khó không ạ. em chưa biết gì liệu có học dc ngay bài này ko ??

    1. sau khi em sửa lại cái comment thì nó lại lỗi thành thế này ạ

      Traceback (most recent call last):
      File “YOLO.py”, line 97, in
      draw_prediction(image, class_ids[i], confidences[i], round(x), round(y), round(x + w), round(y + h))
      File “YOLO.py”, line 37, in draw_prediction
      cv2.rectangle(img, (x, y), (x_plus_w, y_plus_h), color, 2)
      TypeError: only size-1 arrays can be converted to Python scalars

  3. Anh ơi, em thử ảnh camp2 chạy được, nhưng ảnh camp1 với camp3 thì không được, báo lỗi như này:
    File “YOLO.py”, line 44, in
    Width = image.shape[1]
    AttributeError: ‘NoneType’ object has no attribute ‘shape’

    Khăc phục như thế nào anh ?

    1. cam1 là bạn phải sửa thành cam1.png, cam3 thì cam3.jpeg nha, vì nó khác định dạng ảnh với cam2

  4. Anh ơi sao em làm như trên mà không được ạ.
    Nó hiện lỗi python: can’t open file ‘YOLO.py’: [Errno 2] No such file or directory. Trong khi e đã cài thư viện opencv,numpy,argparse.

  5. Anh ơi em mới đổi qua MacOS dùng mà tự dưng bị lỗi
    “No module named cv2”
    Tại ở Windows em k bị ạ

    1. Thanks bạn ủng hộ. Join cùng anh em Mì Ai bạn nhé.

      #MiAI
      Fanpage: http://facebook.com/miaiblog
      Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
      Website: http://ainoodle.tech
      Youtube: http://bit.ly/miaiyoutube

  6. em đã tải đầy đủ các file và cho hết vào 1 thư mục nhưng khi chạy YOLY.py thì nó ra lỗi thế này ạ:
    Traceback (most recent call last):
    File “YOLO.py”, line 96, in
    draw_prediction(image, class_ids[i], confidences[i], round(x), round(y), round(x + w), round(y + h))
    File “YOLO.py”, line 37, in draw_prediction
    cv2.rectangle(img, (x, y), (x_plus_w, y_plus_h), color, 2)
    TypeError: integer argument expected, got float
    Hiện tại em đang sử dụng Opencv 3.4.2

Leave a Reply

Your email address will not be published. Required fields are marked *