Nhận dạng hình ảnh

phát hiện giới tính

Giới thiệu chương trình phát hiện giới tính

Trong quá trình tìm hiểu mình có gặp chương trình phát hiện giới tính khá tốt. Tuy rằng chưa hoàn hảo nhưng có nhiều ưu điểm nên mình giới thiệu cho mọi người.

Chương trình do Arun Ponnusamy viết bằng ngôn ngữ Python sử dụng Keras. Chương trình vừa đủ các file cần thiết cho người mới tìm hiểu và hỗ trợ ảnh lẫn webcam. Nếu bạn muốn chạy test bằng video thì chỉ cần thay id của webcam thành video path là được.

Sử dụng các package gồm: numpy, opencv-python, tensorflow, keras, requests, progressbar, cvlib.

Ưu điểm của chương trình:
– Dễ chạy
– Độ chính xác chấp nhận được (phát hiện sai với khuôn mặt size nhỏ hơn 80px)
– Dễ training lại
– Code dễ hiểu, ngắn gọn

Model cascade đã huấn luyện

Model cascade đã huấn luyện

Có rất nhiều model cascade đã huấn luyện sẵn do cộng đồng OpenCV thực hiện. Các model này chứa đặc trưng của đối tượng cần tìm trong ảnh tổng hợp vào file *.xml. Dựa vào model này mà ta có thể biết đối tượng cần tìm có trong ảnh không. Trong lib opencv cũng đã đã có sẵn 1 số model cascade.

Hướng dẫn sử dụng IPSSclr

IPSSclr dùng để đọc biển số xe máy Việt Nam. Đây là 1 project open source của mình dành cho các bạn sinh viên tìm hiểu. Từ khi public source mình gặp nhiều câu hỏi của các bạn nên mình tổng hợp lại. Các vấn đề chủ yếu như:
– Build lỗi project lib
– Không pull được đầy đủ source
– Không tương thích phiên bản Visual Studio

ipss_clr

Bài này mình sẽ mô tả cách fix các lỗi trên cho người mới tìm hiểu.

nhận diện khuôn mặt

Nhận diện khuôn mặt – P2: face recognition

Sau khi đã phát hiện được khuôn mặt chúng ta tiến hành nhận dạng (recognition).

Để nhận dạng ta sử dụng lib face, là lib được đóng góp bởi người dùng OpenCV. Trong lib face hỗ trợ 3 phương pháp nhận diện là Eigen, Fisher và LBPH. Các tham số đó tốt nhất là để trong file config để dễ dàng thay đổi mà không cần build lại.

Retrain face cascade model

Bài viết này hướng dẫn các bạn retrain cascade model theo nhu cầu sử dụng. Thí dụ như muốn model nhẹ hơn để chương trình chạy nhanh và nhẹ hơn. Hoặc đôi lúc bỏ sót vật thể thì cần bổ sung thêm hình ảnh mới.

Dùng tool Cascade Analytics test file lbpcascade_frontalface.xml thì nhận nhầm 1 khuôn mặt (False Positive). Để chính xác hơn thì cần phải training lại, training nhiều lần đến khi đúng thì thôi.

false_positive_face

Hoặc các trường hợp sử dụng đặc biệt khác mà bạn cần training lại theo mục đích sử dụng. Có thể là xe cộ, chó mèo,… bài viết này tập trung vào khuôn mặt cho dễ hình dung.

Đây là bài viết nâng cao trong seri nhận diện khuôn mặt. Để hiểu bài này các bạn cần đọc lý thuyết & làm ví dụ trong OpenCV cơ bản. Cần đọc và làm theo 3 bài viết sau để hiểu bài này:

1. Phát hiện vật thể – P1: lý thuyết
2. Phát hiện vật thể – P2: thực hành
3. Phát hiện vật thể – P3: kinh nghiệm & hỏi đáp

nhận diện khuôn mặt

[C++] Chương trình nhận diện khuôn mặt

Trong ứng dụng nhận diện khuôn mặt thì bước nhận diện là bước cuối cùng để hiển thị kết quả. Tìm hiểu các bài trước ở đây:
Phát hiện khuôn mặt – face detection
Phát hiện khuôn mặt – P2: tối ưu hoá

Và cũng đã có chương trình nhận diện khuôn mặt viết bằng EmguCV, tuy nhiên code cũng hơi cũ rồi:
[C#] Nhận diện khuôn mặt – face recognition

template

Tìm đồng xu trong ảnh

Bài này viết theo câu hỏi của 1 bạn trong group https://www.facebook.com/groups/thigiacmaytinh/. Sau khi thử nghiệm SURF thấy kết quả tương đối tốt nên mình viết bài này. Tìm đồng xu trong ảnh giống như các phương pháp tìm vật thể 2D khác như logo.

dog.9045

Nhận dạng ảnh chó mèo bằng Neural Network

Phân loại hình ảnh (classification) là bài toán quen thuộc trong Machine Learning. Vô tình gặp 1 bài hướng dẫn về ANN (Artifical Neural Network) khá hay & dễ hiểu nên mình dịch lại. Kèm theo đó là sửa đổi đôi chút trong code để code ngắn gọn và dễ sử dụng hơn.

Trong bài viết gốc hướng dẫn cách implement code, giải thích code tuy nhiên ít hình minh họa. Mình sẽ thêm hình minh họa và mô tả giải thuật bằng cách đơn giản nhất. Hy vọng các bạn sẽ mở rộng ra nhiều thứ hơn là chỉ nhận dạng ảnh chó mèo bằng Neural Network.

Các bạn có thể xem bài viết gốc ở https://picoledelimao.github.io/ hoặc link bài viết đã save lại thành file PDF.

Bài viết chỉ giải thích tương đối, source code có sẵn cuối bài, xem code để hiểu sâu về cách thực hiện.

detected_1

Tìm đối tượng bằng template matching

Để tìm đối tượng trong ảnh thì có nhiều cách, nổi tiếng nhất là Haar Cascade, tuy nhiên lại tốn thời gian để train. (Chưa kể đến train bị fail khá nhiều) Tìm đối tượng bằng Template matching phù hợp với đối tượng đơn giản, ít thay đổi. Cách này cũng rất phù hợp để đếm vật thể giống nhau, như là đếm hàng hóa trên kệ.

Ví dụ đơn giản là tìm logo hoặc vật thể đã biết trong ảnh, hoặc là biển báo giao thông. Phần implement thì opencv đã thực hiện hoàn chỉnh, bài này chỉ giới thiệu cách ứng dụng vào đếm hàng hóa.

Một ví dụ khác về tìm vật thể 2D (không sử dụng template matching): Tìm đồng xu trong ảnh

tesseract-ocr1-600x600

Nhận diện văn bản bằng Tesseract

Nhận diện văn bản tiếng Anh là OCR (Optical Character Recognition). Chuyên dùng để đọc các ký tự trong ảnh rồi chuyển thành text để giảm công sức đánh máy. Trong đó phổ biến nhất là nhận diện văn bản bằng Tesseract.

Cũng như các ứng dụng Thị giác máy tính khác, nhận diện là bước cuối cùng. Các bạn nên xử lý cho hình ảnh rõ ràng, dễ đọc trước khi đưa vào nhận diện