1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng phần mềm phát hiện cử chỉ bàn tay

34 4 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 1,6 MB

Nội dung

z ỦY BAN NHÂN DÂN TP.HCM TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THỦ ĐỨC NGHIÊN CỨU KHOA HỌC Tên đề tài: Xây dựng phần mềm phát cử bàn tay Chủ nhiệm đề tài: Đồn Chánh Tín TP Hồ Chí Minh, năm 2019 Trang1 z ỦY BAN NHÂN DÂN TP.HCM TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THỦ ĐỨC NGHIÊN CỨU KHOA HỌC Tên đề tài: Xây dựng phần mềm phát cử bàn tay Mã số: Chủ nhiệm đề tài: Đồn Chánh Tín Cán phối hợp nghiên cứu: TP Hồ Chí Minh, ngày 03 tháng 02 năm 2019 i MỤC LỤC TRANG TRANG TỰA MỤC LỤC i A DANH MỤC CÁC CHỮ VIẾT TẮT iii B DANH MỤC CÁC BẢNG BIỂU SỐ LIỆU iii C DANH SÁCH CÁC HÌNH iv D PHẦN NỘI DUNG Chương I TỔNG QUAN 1.1 Tổng quan 1.2 Nhiệm vụ đề tài 1.2.1 Yêu cầu đề tài 1.2.2 Nội dung cần thực Chương CƠ SỞ LÝ THUYẾT XỬ LÝ ẢNH 2.1 Phương pháp xử lý ảnh 2.1.1 Tổng quan 2.1.2 Điểm ảnh 10 2.1.3 Độ phân giải ảnh 10 2.2 Phát hiện, đánh dấu đối tượng chuyển động video 10 2.2.1 Phát đối tượng chuyển động Video 10 2.2.2 Kỹ thuật làm mờ, làm mịn ảnh dùng lọc trung vị (Median filter) 11 2.3 Chuyển đổi không gian màu 11 2.3.1 Không gian màu RGB 11 i 2.3.2 Không gian màu HSV 12 2.3.3 Chuyển đổi không gian màu RGB sang không gian màu HSV 13 2.4 Thư viện thị giác máy tính mã nguồn mở OpenCV 14 Chương THIẾT KẾ VÀ THỰC HIỆN CHƯƠNG TRÌNH XỬ LÝ 16 3.1 Yêu cầu thiết kế 16 3.2 Video mô 16 3.3 Lưu đồ giải thuật tổng quát 16 3.4 Chương trình thực 18 Chương KẾT QUẢ THỰC HIỆN 19 4.1 Kết chuyển sang không gian màu HSV 19 4.2 Kết chuyển sang ảnh nhị phân 19 4.3 Kết sau dùng lọc trung vị 20 4.4 Kết dùng phép biến đổi hình thái học 21 4.5 Kết phát bàn tay 22 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 23 5.1 Kết luận 23 5.2 Hướng phát triển 23 E TÀI LIỆU THAM KHẢO 24 F PHỤ LỤC ii A DANH MỤC CÁC CHỮ VIẾT TẮT BGS Background Subtraction LDA Linear Discriminant Analysis FLD Fisher’s Linear Discriminant SVM Support Vector Machine HMM Hidden Makov Model MS-HMM Multi-Stream Hidden Makov Model KLT Karhunen-Loeve Transform SMS Short Message Services GSM Global System for Mobile Communication CV Computervision MLL Machinelearninglibrary IPP Integrated Performance Primitives GPIO General Purpose I/O PEL Picture Element RGB Red Green Blue ANN Artificial Neural Network KNN K Nearest Neighbors Classification B DANH MỤC CÁC BẢNG BIỂU SỐ LIỆU iii C DANH SÁCH CÁC HÌNH HÌNH TRANG Hình 2.1 Mơ hình lọc trung vị 11 Hình 2.2 Khơng gian màu RGB 12 Hình 2.3 Khơng gian màu HSV 12 Hình 2.4 Hình tròn biểu diễn màu sắc (Hue) 13 Hình 2.5 Quá trình phát triển OpenCV 14 Hình 2.6 Cấu trúc sở OpenCV 15 Hình 4.1 Ảnh không gian màu HSV 19 Hình 4.2 Ảnh sau chuyển sang nhị phân 20 Hình 4.3 Ảnh sau dùng lọc trung vị 20 Hình 4.4 Ảnh sau dùng phép biến đổi hình thái học (cịn nhiễu) 21 Hình 4.5 Ảnh sau dùng phép biến đổi hình thái học khử nhiễu 21 Hình 4.6 Kết phát bàn tay phải 22 Hình 4.7 Kết phát bàn tay trái 22 iv D PHẦN NỘI DUNG Lời mở đầu Tính cấp thiết đề tài Trong năm gần đây, hệ thống điều khiển tự động kết hợp xử lý ảnh nghiên cứu ứng dụng rộng rãi giới Nhưng phương pháp xuất Việt Nam vài năm gần đây, chưa nghiên cứu ứng dụng rộng rãi vào thực tế… Xuất phát từ thực tiễn ấy, đề tài nghiên cứu nhằm ứng dụng vào điều khiển thiết bị, dây chuyền công nghiệp cách tự động thông qua hệ thống camera Đồng thời qua cung cấp cho sinh viên trường Cao Đẳng Công Nghệ Thủ Đức tiếp cận với cơng nghệ đại này, qua sinh viên có nhìn trực quan, nắm rõ ngun lý hoạt động hệ thống để áp dụng vào thực tiễn sống sau trường Tình hình nghiên cứu - Các kết nghiên cứu nước: a “Leap motion-Giải pháp đột phá điều khiển cánh tay robot” ThS Nguyễn Đức Hoàng, ThS Trần Thị Hạnh [2] Ở đề tài này, nhóm tác giả sử dụng thiết bị ngoại vi có cảm biến hồng ngoại Leap motion sản xuất công ty LeapMotion để theo dõi chuyển động ngón tay người nhanh xác, cho phép người sử dụng tương tác với máy tính thoải mái cử động tự nhiên Bằng thuật toán xử lý va chạm cánh tay ảo với đối tượng đồ họa 3D môi trường thực tế ảo, nghiên cứu viên đem lại hình thức tương tác hoàn toàn cho người sử dụng nhiều ứng dụng khác game, giảng e-learning… b “Hệ thống hỗ trợ giảng dạy công nghệ nhận dạng cử chỉ” Huỳnh Ngọc Thái Anh Phạm Nguyên Hồng [3] Đây ứng dụng cơng nghệ nhận dạng cử vào điểu khiển trình chiếu trực quan Những khả tương tác cao mà đề tài mang lại việc người dùng đứng thoải mái trình bày nội dung trình chiếu Bất muốn, giảng viên dễ dàng tiếp tục chuyển đến slide với động tác lướt tay khơng khí mà khơng phải sử dụng thiết bị hỗ trợ chuột, bút trình chiếu Nhóm tác giả sử dụng thiết bị camera Kinect để phát nhận dạng cử thể thơng qua thuật tốn Light Coding để điều khiển chương trình PowerPoint việc giảng dạy Các kết nghiên cứu nước - Ở nước khác giới, nghiên cứu tiếp cận đề tài theo nhiều hướng khác nhau, có cơng trình nghiên cứu sau: a Cơng trình nghiên cứu Viola Jones [7]: Nghiên cứu mô tả phương pháp nhận dạng vật thể, xử lý ảnh tốc độ nhanh có độ xác cao Viola Jones đề xuất điểm bật: + Thứ khái niệm “Itergral image” cho phép tính tốn đặc điểm nhận dạng nhanh + Thứ hai thuật toán AdaBoost cho phép lựa chọn đặc điểm quan trọng phân tầng phân loại hoạt động hiệu + Thứ ba phương pháp kết hợp phân loại thành tầng cho phép vùng phông không chứa vật thể bị loại nhanh từ tầng đầu dành nhiều thời gian cho việc tính tốn vùng có vật thể Cách tiếp cận cho phép giảm thời gian tính tốn đàm bảo tỉ lệ nhận dạng cao khoảng gần 94%, tốc độ tăng khoàng 15 lần so với nghiên cứu trước Do đặc điểm trội nên mơ hình áp dụng cho ứng dụng thời gian thực b “Hand gesture recognition based on shape parameters” Meenakshi Panwar Bằng cách ghi nhớ tương đồng hình dạng bàn tay người với bốn ngón tay ngón tay cái, viết trình bày hệ thống nhận dạng cử tay theo thời gian thực sở phát số đặc điểm hình dạng có ý nghĩa định hướng, trung tâm, trạng thái ngón tay, vị trí tương ứng chúng hình ảnh Cách tiếp cận giới thiệu viết hoàn toàn phụ thuộc vào thơng số hình dạng cử tay mà không phụ thuộc vào màu da Để thực phương pháp này, tác giả sử dụng webcam với độ phân giải megapixel, hoạt động 20 khung hình / giây Cách tiếp cận dựa hình dạng đơn giản nhận dạng 45 cử khác sở chuỗi nhị phân bit Thuật toán thực thử nghiệm 450 hình ảnh cho tỷ lệ nhận dạng xấp xỉ 94% Mục tiêu nhiệm vụ nghiên cứu - Mục tiêu: Trong khuôn khổ đề tài, mục tiêu tơi tìm hiểu bước phát hiện, đánh dấu bàn tay chuyển động video so sánh với ngưỡng để xác định tâm, đóng khung dán nhãn lên bàn tay xuất khung ảnh - Nhiệm vụ Đề tài nghiên cứu mô hệ thống phát bàn tay dựa thuật phát màu da dựa không gian màu HSV ,kết hợp lọc trung vị thư viện thị giác máy tính mã nguồn mở OpenCV Intel phát triển Hệ thống lập trình ngơn ngữ Python máy tính Đề tài tập trung nghiên cứu vấn đề sau : - Tìm hiểu thư viện thị giác máy tính mã nguồn mở OpenCV - Tìm hiểu kỹ thuật tốn phát màu da (Skin detection) - Ứng dụng thư viện OpenCV vào ngôn ngữ lập trình Python sử dụng phần mềm Python 2.7 để xây dựng chương trình mơ Đối tượng phạm vi nghiên cứu - Thuật toán Skin detection, lọc trung vị (Median filter) , xử lý ảnh, thư viện thị giác máy tính mã nguồn mở OpenCV, Kỹ thuật lập trình Python Phương pháp nghiên cứu - Phương pháp tham khảo tài liệu: tìm kiếm thơng tin từ sách ,báo, tạp chí cơng nghệ, internet - Phương pháp nghiên cứu thực nghiệm: Từ kiến thức thu thập tiến hành mô phỏng, khảo sát nhiều phương pháp khác để từ xây dựng thống tối ưu Đóng góp đề tài - Ứng dụng vào hệ thống điều khiển tự động, điều khiển thông minh thông qua cử bàn tay - Ứng dụng hệ thống tự động, phục vụ công việc sản xuất, giám sát, nâng cao suất lao động - Giới thiệu cho sinh viên công nghệ mới, kết hợp môn vi điều khiển ,vi điều khiển nâng cao, thiết bị đầu cuối viễn thơng hệ thống tự động hóa nhằm tạo hứng thú học tập cho sinh viên Kết cấu đề tài Chương I TỔNG QUAN 1.1 Tổng quan 1.2 Nhiệm vụ đề tài 1.2.1 Yêu cầu đề tài 1.2.2 Nội dung cần thực Chương CƠ SỞ LÝ THUYẾT XỬ LÝ ẢNH 2.1 Phương pháp xử lý ảnh 2.1.1 Tổng quan 2.1.2 Điểm ảnh 10 2.1.3 Độ phân giải ảnh 10 2.2 Phát hiện, đánh dấu đối tượng chuyển động video 10 2.2.1 Phát đối tượng chuyển động Video 10 2.2.2 Kỹ thuật làm mờ, làm mịn ảnh dùng lọc trung vị (Median filter) 11 2.3 Chuyển đổi không gian màu 11 2.3.1 Không gian màu RGB 11 2.3.2 Không gian màu HSV 12 2.3.3 Chuyển đổi không gian màu RGB sang không gian màu HSV 13 2.4 Thư viện thị giác máy tính mã nguồn mở OpenCV 14 Chương THIẾT KẾ VÀ THỰC HIỆN CHƯƠNG TRÌNH XỬ LÝ 16 3.1 Yêu cầu thiết kế 16 3.2 Video mô 16 2.4 Thư viện thị giác máy tính mã nguồn mở OpenCV Để hỗ trợ cho việc xây dựng thiết kế ứng dụng thực nghiệm đề tài này, tìm hiểu thư viện hỗ trợ việc xử lý ảnh OpenCV Intel OpenCV viết tắt Open Source Computer Vision Library [4].Nó chứa 500 hàm sử dụng thị giác máy (computer vision) OpenCV thư viện mã nguồn mở (open source) http://sourceforge.net/ Thư viện viết ngôn ngữ C C++ chạy hệ điều hành Linux, Window Mac OS X OpenCV thiết kế để nâng cao hiệu suất tính tốn nhấn mạnh đến hệ thống thời gian thực Một điều tuyệt vời OpenCV đưa hệ thống đơn giản, dễ sử dụng giúp người nhanh chóng xây dựng ứng dụng thị giác máy, kể hệ thống kiểm tra nhà máy, ảnh lĩnh vực y học, bảo mật, rô bốt học v v Nó chứa lệnh lập trình xử lý ảnh đơn giản, kể thực thi hàm bậc cao dị tìm khn mặt, theo dõi khn mặt, nhận dạng khuôn mặt Kể từ giới thiệu vào tháng năm 1999, OpenCV sử dụng nhiều ứng dụng, sản phẩm nghiên cứu Ví dụ lĩnh vực hàng khơng vũ trụ, đồ web, sử dụng giảm nhiễu y học, phân tích đối tượng, an ninh, hệ thống dị tìm, theo dõi tự động hệ thống bảo mật, quản lý hệ thống sản xuất, xử lý camera, ứng dụng quân sự, hệ thống hàng không không người lái, mặt đất, tàu ngầm Hình 2.5 Quá trình phát triển OpenCV Cấu trúc OpenCV chia thành phần sau:  CV (computervision): cung cấp hàm liên quan trực tiếp đến Computer Vision, tập trung thao tác cấp thấp ảnh camera cụ thể thao tác xử lý ảnh lọc ảnh, trích biên, phân vùng, tìm contour, biến đổi Fourier 14  MLL(machine learning library):là thư viện máy học, bao gồm nhiều lớp thống kê gộp công cụ xử lý  HighGUI: thành phần chứa thao tác lên file ảnh file video đọc ảnh, hiển thị ảnh, chuyển đổi định dạng  CXCore:chứa đựng nhiều thành phần cấu thành nên toàn OpenCV CxCore bao gồm cấu trúc liệu bản, thao tác lên array, cấu trúc động, hàm vẽ, hàm tác động lên liệu, hàm quản lý lỗi kiện số hàm cần thiết khác Số lượng hàm chứa đựng CxCore lớn  IPP (Integrated Performance Primitives): thư viện Intel gồm hàm tối ưu mức thấp lĩnh vực khác nhau, option OpenCV, OpenCV tự động gọi hàm IPP cài đặt Các mã nguồn ví dụ ứng dụng thực nghiệm CV Xử lý ảnh thuật toán thị giác máy MLL Thống kế tập hợp công cụ xử lý HighGUI Giao diện, truy xuất ảnh video CVCORE Cấu trúc sở thuật toán, hỗ trợ XML, hàm vẽ IPP Mã nguồn tối ưu kiến trúc Intel Hình 2.6 Cấu trúc sở OpenCV 15 Chương THIẾT KẾ VÀ THỰC HIỆN CHƯƠNG TRÌNH XỬ LÝ 3.1 Yêu cầu thiết kế Mục tiêu đề tài thiết kế phần mềm nhận ảnh trực tiếp từ video sau tiến hành phát chuyển động theo vết bàn tay xuất ảnh Quá trình phát hiện, theo vết xử lý theo thời gian thực từ video Trong đề tài xây dựng chương trình mơ phát bàn tay gồm số yêu cầu đặt sau : - 3.2 Chương trình xây dựng máy tính, sử dụng phần mềm Python 2.7, ngơn ngữ lập trình Python, thư viện thị giác máy tính OpenCV - Intel để lập trình Thu nhận hình ảnh từ video máy tính tiến hành phát hiện, theo - vết bàn tay chuyển động Tìm đánh dấu tâm bàn tay - Đánh dấu điểm đường viền bàn tay - Kẻ khung bàn tay phát Video mô Cơ sở liệu sử dụng cho đề tài gồm video trực tiếp từ camera máy tính Một số thơng số video sở liệu:  Loại camera : wedcam  Độ phân giải : 720x1280  Ảnh xử lý : 600x1000  Góc đặt camera: quan sát diện  Độ sáng: ánh sáng phòng ban ngày 3.3 Lưu đồ giải thuật tổng quát Từ yêu cầu xây dựng nên lưu đồ giải thuật tổng quát sau : 16 Mở camera Báo lỗi, đóng chương trình Kiêm tra N Y Giảm kích thước khung ảnh Chuyển sang khơng gian màu HSV Biến đổi ảnh nhị phân Bộ lọc trung vị Biến đổi hình thái học Dị biên bàn tay N Lấy tâm bàn tay Tính khoảng cách tâm đến biên So sánh ngưỡng Y Đóng khung, dán nhãn Hình 3.1 Lưu đồ giải thuật chương trình 17 3.4 Chương trình thực - Phụ lục 18 Chương KẾT QUẢ THỰC HIỆN Chương trình ứng dụng chạy thử nghiệm điều kiện đủ sáng, có nhiễu ánh sáng tác động, có sử dụng lọc trung vị, độ phân giải camera 720x1280 Camera đặt góc quan sát diện 4.1 Kết chuyển sang khơng gian màu HSV - Không gian màu HSV cho kết tốt, làm bật vùng da người so với Tuy nhiên ảnh hưởng nhiễu ánh sáng vật thể có dãy màu với da người Phần màu sắc da người chưa đồng Hình 4.1 Ảnh khơng gian màu HSV 4.2 Kết chuyển sang ảnh nhị phân - Kết sau chuyển sang ảnh nhị phân đối tượng có màu da rõ nét, khơng cịn phân tán Có phân biệt rõ nét đối tượng có màu da background Tuy nhiên, đối tượng rời rạc, tồn nhiều nhiễu 19 Hình 4.2 Ảnh sau chuyển sang nhị phân 4.3 Kết sau dùng lọc trung vị - Kết sau dùng lọc trung vị: Các thành phần nhiễu muối tiêu lọc bỏ Tuy nhiên đối tượng có màu da người cịn rời rạc, gây khó khăn q trình phát Hình 4.3 Ảnh sau dùng lọc trung vị 20 4.4 Kết dùng phép biến đổi hình thái học - Kết sau dùng phép biến đổi hình thái học để làm đầy đối tượng: Nhiễu loại bỏ hồn tồn Khung ảnh cịn đối tượng màu da chuyển động theo vết tốt Hình 4.4 Ảnh sau dùng phép biến đổi hình thái học (cịn nhiễu) Hình 4.5 Ảnh sau dùng phép biến đổi hình thái học khử nhiễu 21 4.5 Kết phát bàn tay - Sau lấy tâm so sánh với ngưỡng, chương trình cho kết phát bàn tay tốt, phân biệt vùng da bàn tay vùng da mặt Hình 4.6 Kết phát bàn tay phải Hình 4.7 Kết phát bàn tay trái 22 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 Kết luận - Trên sở nghiên cứu lý thuyết tổng quan phương pháp phát chuyển động Đặc biệt thuật toán phát màu da (Skin detection) dựa không gian màu HSV, lọc trung vị ( Median filter) kết hợp với kỹ thuật lập trình Python Tơi áp dụng thành cơng thuật tốn phát màu da vào toán phát bàn tay người xuất khung ảnh Xây dựng mô thành công phần mềm phát bàn tay người theo thời gian thực Đặc biệt chương trình xử lý ảnh động, lấy trực tiếp từ liệu camera Bên cạnh đó, q trình xây dựng chương trình ,tơi tìm hiểu thư viện mã nguồn mở OpenCV, qua biết cách sử dụng hàm thư viện OpenCV để xây dựng chương trình phát bàn tay kit nhúng sau - Về chương trình demo, chương trình chạy thử nghiệm máy tính có xử lý Core i7, hệ 4, tốc độ 2,4GHz; RAM 8GB Tốc độ xử lý chương trình khoảng 30 khung hình/s, ép xung lên 3,2Ghz xử lý 60 khung hình/s Hiệu xuất chương trình cịn tùy theo chất lượng loại camera sử dụng, góc đặt camera, điều kiện ánh sáng giám sát Trong điều kiện ánh sáng phù hợp ,với mơi trường ánh sáng đầy đủ chương trình cho kết giám sát tốt, điều kiện ánh sáng thay đổi chương trình hay cho kết lẫn lộn bàn tay nhiễu Điều cho thấy thuật toán phát màu da dựa không gian màu HSV dễ bị ảnh hưởng nhiễu môi trường tác động, đặc biệt nhiễu ánh sáng môi trường thay đổi 5.2 Hướng phát triển - Về hoàn thành yêu cầu mà ban đầu đề tài đề Tuy nhiên, để ứng dụng vào thực tế thuật tốn phát màu da cịn nhiều điểm hạn chế, mà cụ thể ảnh hưởng từ nhiễu Do đó, hướng phát triển đề tài tập trung vào phần xử lý nhiễu, kết hợp với thuật toán khác để xây dựng hệ thống phát xác mơi trường khác nhau, góc đặt camera khác Từ áp dụng vào thực tế hệ thống điều khiển thông minh, dây chuyền tự động - Tăng khả phát camera cách sử dụng camera hồng ngoại sử dụng loại camera có độ phân giải cao - Kết hợp với thuật toán khác để có tỷ lệ giám sát xác 23 E TÀI LIỆU THAM KHẢO TIẾNG VIỆT [1] PGS.TS Nguyễn Quang Hoan, Xử Lý Ảnh, Học Viện Công Nghệ Bưu Chính Viễn Thơng, 2006 [2] Nguyễn Đức Hồng, Trần Thị Hạnh, Leap motion-Giải pháp đột phá điều khiển cánh tay robot, Viện Công nghệ Thông tin Truyền thông CDIT, 2016 [3] Huỳnh Ngọc Thái Anh, Phạm Nguyên Hồng, Hệ thống hỗ trợ giảng dạy cơng nghệ nhận dạng cử chỉ, Đại học Cần Thơ, 2016 TIẾNG NƯỚC NGOÀI [4] M A Turk A P Pentland - Face Recognition Using Eigenfaces, Proc of IEEE Conf on Computer Vision and Pattern Recognition, 1991 [5] Viola, P and Jones, Rapid object detection using a boosted cascade of simple features, Proc IEEE Conf on Computer Vision and Pattern Recognition, Dec 2001 [6] Jolliffe, I.T Principal Component Analysis, second edition (Springer), 2008 [7] Timo Ahonen, Abdenour Hadid, and Matti Pietikăainen, Face Recognition with Local Binary Patterns, 2004 [8] Nefian, Hayes, Face detection and recognition using hidden Markov models, 1998 [9] Douc, R and Cappe, O and Moulines, E., "Comparison of Resampling Schemes for Particle Filtering", Image and Signal Processing and Analysis, 2005 [10] Nicholas A.Mandellos, Chris T.Kiranoudis, IphigeniaKeramitsoglou, “A background subtraction algorithm for detecting and tracking vehicles”, 2011 [11] [12] Shai Avidan, MobilEye Vision Technologies, 24 Mishol Hadkalim, Jerusalem, Israel, “Support Vector Tracking”, 2008 [13] Michael Isard, Andrew Blake, “Condensation – conditional density propagation for visual tracking”, 2011 24 F PHỤ LỤC Đoạn chương trình mơ phát bàn tay // main.cpp import cv2 import numpy as np import time cap = cv2.VideoCapture(0) cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 1000) cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 600) def nothing(x): pass def Angle(v1,v2): dot = np.dot(v1,v2) x_modulus = np.sqrt((v1*v1).sum()) y_modulus = np.sqrt((v2*v2).sum()) cos_angle = dot / x_modulus / y_modulus angle = np.degrees(np.arccos(cos_angle)) return angle def FindDistance(A,B): return np.sqrt(np.power((A[0][0]-B[0][0]),2) + np.power((A[0][1]-B[0][1]),2)) cv2.namedWindow('HSV_TrackBar') h,s,v = 100,100,100 cv2.createTrackbar('h', 'HSV_TrackBar',0,179,nothing) cv2.createTrackbar('s', 'HSV_TrackBar',0,255,nothing) cv2.createTrackbar('v', 'HSV_TrackBar',0,255,nothing) while(1): start_time = time.time() ret, frame = cap.read() blur = cv2.blur(frame,(3,3)) hsv = cv2.cvtColor(blur,cv2.COLOR_BGR2HSV) mask2 = cv2.inRange(hsv,np.array([2,40,50]),np.array([50,255,255])) kernel_square = np.ones((11,11),np.uint8) kernel_ellipse= cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)) dilation = cv2.dilate(mask2,kernel_ellipse,iterations = 1) erosion = cv2.erode(dilation,kernel_square,iterations = 1) dilation2 = cv2.dilate(erosion,kernel_ellipse,iterations = 1) filtered = cv2.medianBlur(dilation2,5) kernel_ellipse= cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(8,8)) dilation2 = cv2.dilate(filtered,kernel_ellipse,iterations = 1) kernel_ellipse= cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)) dilation3 = cv2.dilate(filtered,kernel_ellipse,iterations = 1) median = cv2.medianBlur(dilation2,5) ret,thresh = cv2.threshold(median,127,255,0) contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) max_area=100 ci=0 for i in range(len(contours)): cnt=contours[i] area = cv2.contourArea(cnt) if(area>max_area): max_area=area ci=i cnts = contours[ci] hull = cv2.convexHull(cnts) hull2 = cv2.convexHull(cnts,returnPoints = False) defects = cv2.convexityDefects(cnts,hull2) FarDefect = [] for i in range(defects.shape[0]): s,e,f,d = defects[i,0] start = tuple(cnts[s][0]) end = tuple(cnts[e][0]) far = tuple(cnts[f][0]) FarDefect.append(far) cv2.line(frame,start,end,[0,255,0],1) cv2.circle(frame,far,10,[100,255,255],3) moments = cv2.moments(cnts) if moments['m00']!=0: cx = int(moments['m10']/moments['m00']) # cx = M10/M00 cy = int(moments['m01']/moments['m00']) # cy = M01/M00 centerMass=(cx,cy) cv2.circle(frame,centerMass,7,[100,0,255],2) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(frame,'Center',tuple(centerMass),font,2,(255,255,255),2) distanceBetweenDefectsToCenter = [] for i in range(0,len(FarDefect)): x = np.array(FarDefect[i]) centerMass = np.array(centerMass) distance = np.sqrt(np.power(x[0]-centerMass[0],2)+np.power(x[1]- centerMass[1],2)) distanceBetweenDefectsToCenter.append(distance) sortedDefectsDistances = sorted(distanceBetweenDefectsToCenter) AverageDefectDistance = np.mean(sortedDefectsDistances[0:2]) finger = [] for i in range(0,len(hull)-1): if (np.absolute(hull[i][0][0] - hull[i+1][0][0]) > 80) or ( np.absolute(hull[i][0][1] - hull[i+1][0][1]) > 80): if hull[i][0][1] AverageDefectDistance+130: result = result +1 x,y,w,h = cv2.boundingRect(cnts) img = cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2 cv2.drawContours(frame,[hull],-1,(255,255,255),2) cv2.imshow('Phat hien ban tay',frame) cv2.drawContours(frame, cnt, -1, (122,122,0), 3) cv2.imshow('Dilation',median) #cv2.imshow('Hsv',hsv) cv2.imshow('mask2',mask2) #cv2.imshow('hull',hull) k = cv2.waitKey(5) & 0xFF if k == 27: break cap.release() cv2.destroyAllWindows()

Ngày đăng: 13/10/2023, 15:35

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w