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

Báo Cáo Đồ Án 1 Phát Hiện Chuyển Động Của Vật Thể Sử Dụng Opencv.pdf

15 0 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

Nội dung

Trang 1

Hà Nội, 2024

Trang 2

6 Kết cấu đề tài: 4

CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 5

1.1 Tổng quan v Pycharm 5ề1.2.1 Khái niệm 5

1.2.2. Các tính năng của Pycharm 5

1.2.3. Ưu điểm của Pycharm 7

1.2.4. Nhược điểm của Pycharm 7

1.2 T ng quan v OpenCV 7 ổ ề1.2.1 Khái niệm 7

1.2.2. Đặc điểm nổi bật của OpenCV 8

1.2.3.ng d ng th c t c a Opencvụự ế ủ 8

1.2.4 Các module ph ổ biến c a Opencv 9

CHƯƠNG 2 THIẾT KẾ CHƯƠNG TRÌNH 11

2.1 Mô tả ứ ng d ng 11ụ2.2 Đánh giá và điều ch nh 11ỉ2.3 Xây dựng ng d ng 11ứ ụ2.4 Giải thích chương trình 12

2.5 Giao diện chương trình 13

KẾT LUẬN 15

Trang 3

3

MỞ ĐẦU

1. Lí do nghiên cứu đề tài

Trong th c t hi n nay, vi c phát hiự ế ệ ệ ện đối tượng chuyển động là m t trong ộnh ng vữ ấn đề quan trọng trong lĩnh ựv c trí tu nhân t o Vi c phát hiệ ạ ệ ện đối tượng chuyển động có thể được áp dụng trong nhiều lĩnh vực như giám sát an ninh, giám sát giao thông, giám sát tàu thuy n, giám sát d ch bề ị ệnh, điều khi n robot và nhiể ều ứng dụng khác Việc s dụng OpenCV trong nghiên c u phát hiử ứ ện đối tượng có nhi u l i ích, bao g m tề ợ ồ ốc độ ử x lý nhanh, tính ổn định và khả năng xử lý các loại ảnh và video khác nhau Bên cạnh đó, OpenCV còn có nhiều thuật toán phát hiện đối tượng khác nhau, cho phép người nghiên cứu lựa chọn phù hợp với nhu cầu và yêu c u cầ ủa ứng d ng c ụ ụ thể

• Tìm cách tối ưu hóa quá trình phát hiện đối tượng chuyển động để ả gi m thi u ểsai sót phát hiện, làm tăng độ chính xác, đồng thời gi m t i cho hả ả ệ thống x ử lý và lưu trữ

• Áp d ng các kụ ỹ thuật học máy để phát hiện đối tượng chuyển động trong các tình hu ng khó xố ử lý, như các đối tượng có kích thước, hình d ng và màu sạ ắc khác nhau, giúp tăng độ chính xác và khả năng phát hiện

• Nghiên c u và phát tri n các ng d ng c a phát hiứ ể ứ ụ ủ ện đối tượng chuyển động trong các lĩnh vực khác nhau, như an ninh, giám sát, robot,… giúp tăng hiệu qu và nâng cao chả ất lượng cuộc sống của con người.

3. Đối tượng nghiên c u

• Các đối tượng trong các hình ảnh hoặc video, được di chuy n trong không gian ểvà thường có hướng và tốc độ khác nhau Các đối tượng này có thể là người, động vật, phương tiện giao thông, vật thể trong sản xuất, v.v

• Trong quá trình phát hiện đối tượng chuyển động, các đối tượng này được xác định dựa trên sự khác biệt giữa các khung hình liên tiếp, được phân loại dựa trên các đặc trưng như kích thước, hình dạng, màu sắc, vị trí và hướng di chuyển

Trang 4

• Công nghi p: Phát hiệ ện đối tượng chuyển động trong các dây chuyền sản xuất giúp tăng năng suất và giảm chi phí sản xuất bằng cách giám sát và kiểm tra quy trình s n xu ả ất.

• Tự động hóa: Phát hiện đối tượng chuyển động trong các ứng d ng tự động ụhóa, bao g m xe t hành và robot, giúp cho các thi t b di chuy n m t cách an ồ ự ế ị ể ộtoàn và hiệu qu ả

• Giải trí: Phát hiện đối tượng chuyển động trong các ng d ng giứ ụ ải trí như trò chơi điện tử và các ứng dụng AR/VR giúp tạo ra trải nghiệm người dùng tốt hơn

• Phạm vi nghiên c u có th m rứ ể ở ộng đến vi c áp d ng các kệ ụ ỹ thuật phát hiện đối tượng chuyển động trong các lĩnh vực mới và phát tri n các thu t toán phát ể ậhi n chuyệ ển động mới để ải thiện độ c chính xác và tốc độ x ử lý.

5. Phương pháp nghiên cứu

Phương pháp nghiên cứu tài liệu: nghiên cứu các tài liệu chuyên ngành Phương pháp thực nghiệm: xây dựng và chạy thử nghiệm chương trình.6 K ết cấu đề tài:

Chương 1: Giới thiệu về Pycharm, OpenCV, hướng dẫn cài đặt

Chương 2: Xây dựng chương trình Phát hiện chuyển động sử dụng OpenCV

Trang 5

Hình 1.1 Giao diện c a Pycharm ủ1.2.2. Các tính năng của Pycharm

Trình sửa code thông minh

• Giúp chúng ta viết mã chất lượng cao hơn

• Nó bao gồm các lược đồ màu (color schemes) cho t khóa, lừ ớp và hàm Điều này giúp tăng khả năng đọc và hiểu mã

• Giúp xác định l i m t cách dỗ ộ ễ dàng

• Cung cấp tính năng tự động hoàn thành và hướng dẫn để hoàn thành mã Điều hướng mã

Trang 6

• Nó giúp các nhà phát tri n ch nh s a và c i thi n mã v i ít n l c và th i gian ể ỉ ử ả ệ ớ ỗ ự ờhơn

• Với điều hướng mã, lập trình viên có thể dễ dàng điều hướng đến một hàm, l p hoớ ặc tệp

• M t l p trình viên có thộ ậ ể xác định v trí m t ph n t , m t ký hi u ho c mị ộ ầ ử ộ ệ ặ ột bi n trong mã ngu n trong th i gian ng n ế ồ ờ ắ

• Hơn nữa, bằng cách sử dụng chế độ thấu kính, nhà phát triển có thể kiểm tra và vá l i toàn b mã ngu n m t cách k ỗ ộ ồ ộ ỹ lưỡng.

u trúc Tái cấ

• Nó có l i th là th c hiợ ế ự ện các thay đổi hi u quệ ả và nhanh chóng đố ớ ải v i c bi n cế ục bộ (local variables) và biến toàn c c (global variables) ụ

• Tái c u trúc trong PyCharm cho phép các nhà phát tri n c i thi n c u trúc bên ấ ể ả ệ ấtrong mà không thay đổi hiệu su t bên ngoài cấ ủa code.

• Pycharm cũng giúp phân chia các lớp và chức năng mở rộng tốt hơn với sự trợ giúp của phương pháp trích xuất.

H ỗ trợ cho nhi u công ngh web khác ề ệ

• Nó giúp các nhà phát triển t o các ng d ng web b ng Python ạ ứ ụ ằ• Nó hỗ ợ tr các công nghệ web phổ ến như HTML, CSS và JavaScript bi• Các nhà phát tri n có l a ch n ch nh s a tr c tuy n vể ự ọ ỉ ử ự ế ới IDE này Đồng thời,

h ọ có thể xem trước trang web đã cập nhật/đã tạo

• Các nhà phát tri n có th ể ể theo dõi các thay đổi trên trình duyệt web trực tiếp • PyCharm cũng hỗ trợ AngularJS và NodeJS để phát triển các ứng dụng web H ỗ trợ cho các web framework Python ph bi n ổ ế

• PyCharm h ỗ trợ các web framework như Django.

• Cung cấp tính năng tự động điền và gợi ý cho các thông số của Django • Giúp vá lỗi các code của Django.

• Hỗ ợ tr các web framework thông dụng như web2py và PyramidH ỗ trợ cho Thư viện Khoa h c Pythonọ

Trang 7

• Có rất nhiều plugin h u ích và phím tữ ắ ữu ích trong PyCharm t h

• PyCharm tích hợp các tính năng của thư viện và IDE như tự động hoàn thành và tô màu

• Nó cho phép xem mã nguồn trong m t cú nhấp chu t ộ ộ• Tiết kiệm th i gian phát tri n ph n m m ờ ể ầ ề

• Tính năng đánh dấ ỗi trong code giúp nâng cao hơn nữu l a quá trình phát tri n ể• Cộng đồng các nhà phát tri n Python vô cùng l n và chúng ta có th gi i quyể ớ ể ả ết

các th c mắ ắc/ nghi ng c a mình m t cách dờ ủ ộ ễ dàng 1.2.4. Nhược điểm của Pycharm

• PyCharm không mi n phí và phiên b n Professional cễ ả ủa nó khá đắt.• Tính năng tự điền (auto-complete) sẽ không tốt cho các lập trình viên newbie • Nó có thể gây ra s cự ố trong khi sửa ch a các công c ữ ụ như venv.

1.2 T ng quan v OpenCV ổề

1.2.1 Khái niệm

OpenCV (Open Computer Vision) là một thư viện mã ngu n m ồ ở hàng đầu cho x lý vử ề thị giác máy tính, machine learning, xử lý ảnh OpenCV đươc viết b ng ngôn ng C/C++, vì v y có tằ ữ ậ ốc độ tính toán r t nhanh, có ấ thể ử ụ s d ng với các ứng dụng liên quan đến th i gian th c Opencv có các interface cho C/C++, ờ ựPython Java vì v y hậ ỗ trợ được cho Window, Linux, MacOs l n Android, iOS ẫ

Trang 8

OpenCV có cộng đồng khoảng 50000 người dùng và số lượng download vượt trên 6 triệu l n ầ

Hình 1.2 Giao diện c a OpenCV ủ

1.2.2 Đặc điểm n i b t c a OpenCV ổ ậ ủ

• OpenCV thu hút được đông đảo người dùng tin tưởng, s d ng b i nh ng tính ử ụ ở ữnăng vô cùng đặc biệt, phân chia các nhóm tính năng cùng các module riêng như sau:

• Opencv có khả năng giúp xử lý cũng như hiển th lên các hình nh, video, I ị ảhay O(highgui, corem imgproc)

• Có thể phát hiện ra được các vật thể như: nonfee, objdetect, features2d,…• Opencv cũng có tính năng CUDA acceleration hay còn được biết đến là GPU

Trang 9

9 • Phân tích được các hình ảnh tỏng y học

• Tìm kiếm cũng như phục hồi đư c các hình ảnh, video ợ• Ứng d ng vào phim và các cụ ấu trúc 3D chuyển động • Ứng d ng vào nghụ ệ thu t sắp đặt tương tác ậ1.2.4 Các module ph ổ biến c a Opencv

Trong Opencv s có các c u trúc module khác nhau và nó bao g m c m t s ẽ ấ ồ ả ộ ốthư viện liên kết tĩnh hoặc cũng có thể là liên kết động Một số module phổ biến nhất của Opencv gồm:

• Core (core functionality) – được biết đến là m t module nh g n, giúp xác ộ ỏ ọđịnh được các cấu trúc dữ liệu cơ bản nhất và nó bao gồm cả các mảng đa chiều dày đặc, các ức năng cơ bản Core cũng được sử dụng bởi rất nhiều chcác module khác trong opencv

• Imgproc ( Image Processing ): Đây là module có chức năng xử lý các hình ảnh gốm có l c hình ọ ảnh tuy n tính, phi tuy n tính, cho phép biế ế ến đổi về hình học như: chỉnh size, warp ph i c nh, ánh x lố ả ạ ại trên cơ sở ả b ng chung, afin,…) Đồng thời module này cũng có khả năng chuyển đổi không gian màu, các biểu đồ,…

• Video (video analysis): module này cho phép phân tích các video có tính năng ước tính chuyển động, tách nền cũng như các thuật toán theo dõi v t th trong ậ ểopencv

• Cali 3d ( Camera Calibration and 3D Resconstruction): đây là thuật toán hình học đa chiều cơ bản nh t, có thấ ể hiệu chu n máy ẩ ảnh single và stereo cũng như dự đoán được các đối tượng, thuật toán như là thư tín âm thanh nổi, các y u t giúp tái t o 3D ế ố ạ

• Features2d (2d features framework): module có th phát hiể ện được các đặc tính n i bổ ật nhất trong b nh n di n, thông s i ch i hay b truy su t thông ộ ậ ệ ố đố ọ ộ ấs ố

• Objdetect ( object detection): module giúp phát hiện ra các đối tượng, đồng thời mô phỏng cho các hàm đã được định sẵn như Predefined classes VD: con người, khuôn mặt, m t, xe hơi,…) ắ

• Highgui ( high – level GUI ): đây là một giao diện rất dễ sử dụng nhằm thực hi n quá trình giao tiệ ếp UI đơn giản trong Opencv

Trang 10

• Videoio (video I/O): đây cũng là giao diện d sử d ng nhễ ụ ằm thu, mã hóa các video trong opencv

• GPU: thuật toán giúp tăng tốc GPU t nh ng module opencv khác ừ ữ

Trang 11

Ví d , trong m t hụ ộ ệ thống giám sát an ninh, phát hi n chuyệ ển động có th ểđược sử dụng để ảnh báo cho người quản lý khi có một đối tượng di chuy n qua c ểkhu vực được giám sát Trong video giám sát giao thông, phát hiện chuyển động có thể được s dử ụng để theo dõi và phát hiện các phương tiện giao thông trái phép, ho c phát hi n các vặ ệ ật thể di chuyển trên đường

Trong bài toán này, ta s d ng các kử ụ ỹ thuậ ử lý ảnh đểt x so sánh các khung hình liên ti p và tìm ra s khác bi t gi a chúng Các kế ự ệ ữ ỹ thuật này bao g m so ồsánh độ tương phản, độ sáng và màu s c c a các pixel trên nh N u s khác biắ ủ ả ế ự ệt giữa hai khung hình vượt qua một ngưỡng (threshold) được thi t l p, ta có th kế ậ ể ết luận r ng có s chuyằ ự ển động trong khung hình và ti n hành phát hiế ện đối tượng di chuy n bể ằng cách xác định các vùng tương ứng trên hai khung hình

2.2 Đánh giá và điều chỉnh

Điều chỉnh kích thước khung hình: Kích thước khung hình c n phầ ải được điều chỉnh phù hợp với điều kiện thực tế Nếu khung hình quá l n, việc xử lý sẽ mất ớnhi u thề ời gian và tài nguyên máy tính Ngượ ạc l i, n u khung hình quá nh , s ế ỏ ẽkhó phát hiện được các chuyển động nh ho c không chính xác ỏ ặ

S dử ụng các phương pháp lọc ảnh: Các phương pháp lọc ảnh như làm mờho c l c thông th p có th giúp gi m nhi u và c i thi n k t qu phát hi n chuy n ặ ọ ấ ể ả ễ ả ệ ế ả ệ ểđộng

Kiểm tra độ tin c y: K t qu phát hi n chuyậ ế ả ệ ển động cần được kiểm tra để đảm bảo tính chính xác và độ tin c y Có th s dậ ể ử ụng các phương pháp đánh giá hiệu suấ ểt đ đánh giá kết qu ả

S d ng các thu t toán khác nhau: Có nhi u thuử ụ ậ ề ật toán khác nhau để phát hiện chuyển động, và mỗi thuật toán có ưu nhược điểm riêng Do đó, sử dụng nhiều thuật toán khác nhau có th cể ải thiện k t qu phát hi n chuyế ả ệ ển động

2.3 Xây dựng ng dứụng

Xây d ng ng d ng: Xây d ng ng d ng Phát hi n chuyự ứ ụ ự ứ ụ ệ ển động bằng thư vi n OpenCV, Tkinter Trong quá trình xây dệ ựng chương trình, tôi đã sử ụng d

Trang 12

PyCharm để phát tri n mã ngu n và qu n lý d án PyCharm cung cể ồ ả ự ấp cho người dùng m t loộ ạt tính năng hữu ích, giúp tăng hiệu suất và ti t kiế ệm thời gian.

Hình 2.1 Source code Phát hiện đối tượng chuyển động

Để phát hiện chuyển động sử d ng OpenCV, chúng ta có thể sử d ng m t s k thuật ụ ụ ộ ố ỹx ử lý ảnh, như:

• Lấy background: L y background t ấ ừ các khung hình đầu tiên hoặc từ video • So sánh frame hi n tệ ại với background để xác định các v t th hoậ ể ặc phần nào đó

của ảnh có chuyển động hay không • Áp dụng các b lọc để loại bỏ nhiễu ộ

• S dử ụng các hàm xác định ranh giới để xác định các đối tượng

2.4 Giải thích chương trình

Trong chương trình trên, chúng ta sử dụng hàm cv2.VideoCapture() để lấy khung hình từ camera Sau đó, chúng ta lấy background từ khung hình đầu tiên và x lý các ửkhung hình tiếp theo để phát hi n chuyệ ển động Các đối tượng được phát hi n sệ ẽ được bao quanh b ng các h p màu xanh lá cây Nằ ộ ếu người dùng nhấn phím "q", chương trình s d ng l i và gi i phóng tài nguyênẽ ừ ạ ả

Chương trình này sử ụng OpenCV và Tkinter để d tạo một giao diện đơn giản cho phép người dùng mở camera hoặc tệp video để phát hiện chuyển động

Trang 13

13

Trong chương trình, ta sử ụng module Tkinter để d tạo một giao diện đơn giản với một nút "Open Camera" Khi người dùng nhấn nút này, chương trình sẽ m camera và ởphát hi n chuyệ ển động trên các khung hình đầu vào

Nếu người dùng muốn mở một tệp video thay vì mở camera, họ có thể nhấn nút "Open File" và ch n t p video t cọ ệ ừ ửa sổ ở ệ m t p

Trong chương trình, chúng ta sử ụng hàm open_camera() để d mở camera và phát hi n chuyệ ển động Đầu tiên, ta s d ng câu lử ụ ệnh cap = cv2.VideoCapture(0) để m ởcamera Sau đó, ta đọc từng khung hình (frame) t camera bằng cách s d ng hàm ừ ử ụcap.read() Đối s ố đầu tiên c a hàm tr v m t bi n boolean cho bi t li u viủ ả ề ộ ế ế ệ ệc đọc khung hình có thành công hay không N u không, ta s thoát vòng lế ẽ ặp while Đố ố thứi s hai của hàm chứa khung hình đọc được

Sau đó, ta chuyển đổi khung hình sang ảnh xám bằng cách sử dụng cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) Tiếp theo, ta s dử ụng cv2.absdiff() để tính toán s khác bi t gi a khung hình hi n tự ệ ữ ệ ại và khung hình trước đó Ta sử ụ d ng giá trị ngưỡng để tạo ra một ảnh nhị phân, trong đó giá trị pixel lớn hơn ngưỡng được đặt b ng 255 và giá tr pixel nh ằ ị ỏ hơn ngưỡng được đặt bằng 0 Sau đó, ta tìm các đối tượng có chuyển động bằng cách tìm các đường vi n trong nh nh phân N u di n tích cề ả ị ế ệ ủa một đường vi n nhề ỏ hơn mộ ngưỡng nào đó, ta bỏ qua nó Ngượ ạt c l i, ta v m t hình ẽ ộchữ nhật xung quanh đối tượng và hiển th khung hình lên màn hình ị

Dùng hàm cv2.cvtColor() để làm chuyển đổi màu c a khung hình t BGR sang màu ủ ừxám (gray)

Dùng hàm cv2.absdiff() để ấ l y giá tr ịtuy t đối của hi u giữa khung hình hi n t i ệ ệ ệ ạ(gray) và khung hình trước đó (last_frame) Điều này s giúp lo i b nhi u và t o ra mẽ ạ ỏ ễ ạ ột bức tranh về ự s khác biệt giữa hai khung hình liên tiếp

S dử ụng cv2.threshold() để áp dụng ngưỡng nh phân lên b c tranh khác bi t, ị ứ ệgiúp tách riêng vùng chuyển động

S dử ụng cv2.findContours() để tìm các đường vi n trong vùng chuyề ển động

Duyệt qua t t cấ ả các đường viền được tìm th y và v m t h p gi i h n (bounding ấ ẽ ộ ộ ớ ạbox) xung quanh vùng chuyển động, n u di n tích cế ệ ủa đường vi n lề ớn hơn 900 pixel.

Cuối cùng, chúng ta sử dụng cap.release() để giải phóng tài nguyên camera và cv2.destroyAllWindows() để đóng tất c các cửa sổ hi n th ả ể ị

2.5 Giao diện chương trình

Ngày đăng: 18/06/2024, 17:05

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

TÀI LIỆU LIÊN QUAN

w