Mô phỏng hệ thống giám sát lưu lượng xe ô tô dùng xử lý ảnh

43 1 0
Mô phỏng hệ thống giám sát lưu lượng xe ô tô dùng xử lý ảnh

Đ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

z SỞ GIÁO DỤC VÀ ĐÀO TẠO TP.HCM TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THỦ ĐỨC BÁO CÁO KẾT QUẢ THỰC HIỆN ĐỀ TÀI NGHIÊN CỨU KHOA HỌC NĂM HỌC 2017-2018 MÔ PHỎNG HỆ THỐNG GIÁM SÁT LƯU LƯỢNG XE Ô TƠ DÙNG XỬ LÝ ẢNH ĐƠN VỊ CHỦ TRÌ: KHOA ĐIỆN – ĐIỆN TỬ CHỦ NHIỆM ĐỀ TÀI: ĐOÀN CHÁNH TÍN Tháng năm 2018 Trang1 z BÁO CÁO KẾT QUẢ THỰC HIỆN ĐỀ TÀI NGHIÊN CỨU KHOA HỌC NĂM HỌC 2017-2018 MÔ PHỎNG HỆ THỐNG GIÁM SÁT LƯU LƯỢNG XE Ô TÔ DÙNG XỬ LÝ ẢNH ĐƠN VỊ CHỦ TRÌ: KHOA ĐIỆN – ĐIỆN TỬ CHỦ NHIỆM ĐỀ TÀI: ĐỒN CHÁNH TÍN Trưởng Khoa Chủ nhiệm đề tài Tp Hồ Chí Minh, tháng năm 2018 i ĐỀ CƯƠNG NGHIÊN CỨU ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CẤP CƠ SỞ NĂM HỌC 2017 - 2018 Tên đề tài Tiếng Việt : MÔ PHỎNG HỆ THỐNG GIÁM SÁT LƯU LƯỢNG XE Ô TÔ DÙNG XỬ LÝ ẢNH Tiếng Anh: MODELING THE CARS DENSITY MORNITORING SYSTEM USING IMAGE PROCESSING Thời gian thực hiện: tháng Bắt đầu từ tháng năm 2017 đến tháng năm 2018 Đề tài có trùng với đề tài tiến hành khơng? có, nêu lý Khơng Chủ nhiệm đề tài (Kèm theo Lý lịch khoa học theo biểu mẫu 02) - Họ tên: Đoàn Chánh Tín Giới tính:nam - Chun mơn đào tạo: Kỹ thuật điện tử-truyền thông - Học hàm, học vị: Thạc sỹ - Chức vụ: Giảng viên - Đơn vị công tác: Trường Cao Đẳng Công Nghệ Thủ Đức - Địa liên hệ: 16/1 Ấp Trung Đông, xã Thới Tam Thôn, Hóc Mơn, Tp.HCM - Điện thoại liên lạc: 0909208064 - Email:doanchanhtin@tdc.edu.com Tóm tắt hoạt động nghiên cứu chủ nhiệm đề tài (Các chương trình, đề tài nghiên cứu khoa học tham gia, cơng trình cơng bố liên quan tới phương hướng đề tài) Thời Tư cách Tên đề tài/cơng trình Cấp quản lý/nơi cơng bố gian tham gia THIẾT KẾ VÀ THI CÔNG DÀN TRẢI MƠ HÌNH ĐIỀU 2014Trường Cao Đẳng Cơng KHIỂN THIẾT BỊ Chủ nhiệm đề tài 2015 nghệ Thủ Đức TỪ XA DÙNG TIN NHẮN ĐIỆN THOẠI SMS i 20152016 20162017 NGHIÊN CỨU XÂY DỰNG HỆ THỐNG PHÁT HIỆN GƯƠNG MẶT NGƯỜI TRONG THỜI GIAN THỰC XÂY DỰNG PHẦN MỀM NHẬN DẠNG MẶT NGƯỜI THEO THỜI GIAN THỰC Chủ nhiệm đề tài Trường Cao Đẳng Công nghệ Thủ Đức Chủ nhiệm đề tài Trường Cao Đẳng Công nghệ Thủ Đức Cơ quan phối hợp cộng tác viên đề tài (Ghi rõ đơn vị cá nhân mời nhận lời mời tham gia đề tài, cá nhân tham gia Đề tài phải có Lý lịch khoa học theo mẫu 02 ý kiến xác nhận đồng ý tham gia đồng thực đề tài) Cộng tác viên Cơ quan phối hợp TT Họ tên Chuyên ngành Cơ quan/đơn vị ứng dụng kết nghiên cứu TT Tên quan/đơn vị ứng dụng kết nghiên cứu Trường Cao Đẳng Công Nghệ Thủ Đức, Bộ môn Điện tử, Điện tử viễn Thông Địa 53 Võ Văn Ngân - Phường Linh Chiểu - Quận Thủ Đức – TP HCM Thuyết minh cần thiết đề tai - Tổng quan cơng trình nghiên cứu ngồi nước liên quan tới vấn đề nghiên cứu đề tài (trích dẫn tài liệu ngồi nước) • TS Đỗ Năng Tồn TS Phạm Việt Bình, Giáo trình xử lý ảnh.: Đại Học Thái Nguyên • PGS.TS Nguyễn Quang Hoan, Xử Lý Ảnh: Học Viện Cơng Nghệ Bưu Chính Viễn Thơng • Lê Văn Thiên, Đặng Văn Đức: Hệ thống giao thông thông minh (ITS) khả áp dụng thành phố Biên Hòa ii • BenjaminCoifman, DavidBeymer, PhilipMcLauchlan, JitendraMalik: A realtime computer vision system for vehicle tracking and traffic surveillance • Jun-Wei Hsieh, Shih-Hao Yu, Yung-Sheng Chen: Automatic traffic surveillance system for vehicle tracking and classification • Kostia Robert: Night-Time Traffic Surveillance: A Robust Framework for Multi-vehicle Detection, Classification and Tracking - Lý chọn đề tài: + Tính thời đề tài: Ngày nay, với phát triển vượt bậc khoa học kỹ thuật mang lại cho người sống tiện nghi hơn, thoải mái hơn, an toàn Cùng với phát triển đó, loại máy móc đại máy ảnh số, máy quay phim kỹ thuật số, máy vi tính,…cũng đời nhằm phục vụ nhu cầu ngày cao người Qua đó, lượng thơng tin người thu dạng số ngày tăng, liệu hình ảnh có lượng thơng tin lớn xác loại liệu từ cảm biến khác Điều giúp cho việc giải vấn đề lĩnh vực điều khiển tự động dễ dàng Từ đó, lĩnh vực khoa học cơng nghệ đời nhằm đáp ứng cho việc xử lý liệu ảnh số “Xử lý ảnh” (Image Processing) Xử lý ảnh ngành khoa học mẻ so với nhiều ngành khoa học khác tốc độ phát triển nhanh, kích thích trung tâm nghiên cứu, ứng dụng, đặc biệt máy tính chun dụng riêng cho nhằm giải vấn đề phát sinh xã hội phát triển ngày Trong đó, giao thơng Thành phố Hồ Chí Minh nói riêng giao thơng nước nói chung vấn đề vô cấp thiết Với tình hình giao thơng phức tạp, thường xun kẹt xe cao điểm vấn đề nan giải thành phố Thiết nghĩ, nguyên nhân gây tình trạng kẹt xe cục nhiều xe lưu thông đường thời điểm mà khơng có kiểm sốt lưu lượng xe lưu thơng đường để kịp thời điều chỉnh Từ yêu cầu phải có hệ thống giám sát mật độ xe lưu thơng cách hồn tồn tự động, hiệu xác để kịp thời điều chỉnh phân luồng giao thông, giúp giảm lưu lượng xe đường, giảm kẹt xe iii + Tính cấp thiết đáp ứng nhu cầu phát triển kinh tế - xã hội, nâng cao chất lượng đào tạo - Trong năm gần đây, hệ thống giám sát giao thông kết hợp xử lý ảnh nghiên cứu ứng dụng rộng rãi giới để theo dõi xe lưu thông, nhận dạng biển số xe, đo tốc độ xe, phát xe vi phạm, sai đường… 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 hệ thống camera giám sát giao thơng, nâng cao khả kiểm sốt, giảm tình trạng kẹt xe Đồ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 Đơn vị, địa bàn tiến hành nghiên cứu (Phường/Xã, Quận/Huyện, Tỉnh/TP, Vùng) - Khoa Điện – Điện Tử, Trường Cao Đẳng Công Nghệ Thủ Đức, Bộ môn Điện tử, Điện tử viễn Thông Mục tiêu đề tài - Mục tiêu đề tài nghiên cứu xây dựng hệ thống giám sát lưu lượng xe ô tô lưu thông đường dùng thuật toán trừ kết hợp thư viện xử lý ảnh OpenCV Intel ngôn ngữ lập trình C++ 10 Đối tượng phạm vi nghiên cứu đề tài - Thuật toán Background Subtraction, Blob tracker, 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 Visual C++ 11 Các phương pháp nghiên cứu sử dụng để nghiên cứu đề tài - 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 iv 12 Các chuyên đề nghiên cứu dự kiến đề tài (tên nội dung chuyên đề) 13 Cấu trúc dự kiến báo cáo kết đề tài (chi tiết hoá chương mục) GIỚI THIỆU 1.1 Tổng quan 1.2 Các kết nghiên cứu nước 1.2.1 Các kết nghiên cứu nước 1.2.2 Các kết nghiên cứu nước 1.3 Mục tiêu nghiên cứu CƠ SƠ LÝ THUYẾT 2.1 Phương pháp xử lý ảnh 2.1.1 Tổng quan 2.1.2 Điểm ảnh 2.1.3 Độ phân giải ảnh 2.1.4 Nén ảnh 2.1.5 Trích chọn đặc điểm 2.2 Phát đối tượng chuyển động 2.2.1 Bài toán phát đối tượng 2.2.2 Các phương pháp phát chuyển động 2.2.3 Giới thiệu phân lớp phát vật thể 2.2.4 Giới thiệu phương pháp bám vật thể chuyển động 2.2.5 Thuật toán trừ ( Background Subtraction) 2.2.6 Bộ lọc Gaussian 2.3 Thư viện thị giác máy tính mã nguồn mở OpenCV THIẾT KẾ THỰC HIỆN PHẦN MỀM KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 1.1 Kết đạt 1.2 Hướng phát triển TÀI LIỆU THAM KHẢO v 14 Tính đa ngành liên ngành đề tài - Đề tài liên quan đến ngành/chuyên ngành nào? + Kỹ thuật điện tử, điện tử - truyền thông - Tính đa/liên ngành thể nội dung trình triển khai đề tài? + Kỹ thuật điện tử, truyền thơng tự động hóa 15 Khả sử dụng sở vật chất, trang thiết bị (tên phịng thí nghiệm sử dụng đề tài) - Phịng thí nghiệm điện tử bản, kỹ thuật xung số, phịng thí nghiệm viễn thông 16 Khả hợp tác quốc tế - Hợp tác đã/đang có (tên tổ chức vấn đề hợp tác) - Hợp tác có (tên tổ chức vấn đề hợp tác) 17 Các hoạt động nghiên cứu đề tài - Nghiên cứu lý thuyết  - Điều tra khảo sát  - Xây dựng mô chương trình mơ  - Biên soạn tài liệu  - Viết báo cáo khoa học  - Hội thảo khoa học  - Tập huấn  - Các hoạt động khác  18 Kết dự kiến 18.1 Kết khoa học - Dự kiến đóng góp đề tài Ứ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 - Số báo, sách, báo cáo khoa học dự kiến công bố vi 18.2 Kết ứng dụng - Mô hệ thống giám sát lưu lượng xe thời gian thực - Khả ứng dụng thực tế kết quả: Ứng dụng vào hệ thống giám sát an ninh, nhận dạng, tìm kiếm liệu, điều khiển vào ra… 18.3 Kết ứng dụng khác - Các sản phẩm công nghệ điều khiển thông minh 19 Nội dung tiến độ thực đề tài (các công việc cần triển khai, thời hạn thực sản phẩm đạt được) TT Hoạt động nghiên cứu Thu thập viết tổng quan tài liệu Xây dựng đề cương nghiên cứu chi tiết Chuyên đề/Nội dung Chuyên đề/Nội dung Điều tra khảo sát, thí nghiệm, thu thập số liệu Chuyên đề/Nội dung Chuyên đề/Nội dung Xử lý kết Viết báo cáo chuyên đề Số chuyên đề (như mục 2) Hội thảo kỳ Bổ sung số liệu/thử nghiệm/ứng dụng Tổng kết số liệu Viết báo cáo tổng hợp Hội thảo lần cuối Hoàn thiện báo cáo Nộp sản phẩm Nghiệm thu đề tài Thời gian thực Từ Đến tháng tháng 8/2017 9/2017 9/2017 10/2017 10/2017 11/2017 11/2017 12/207 12/2017 01/2018 01/2018 01/2018 01/2018 02/2018 02/2018 02/2018 02/2018 02/2018 Sản phẩm khoa học 20 Phân bổ kinh phí (Tuỳ theo đặc điểm chuyên môn đề tài, Tác giả ghi mục/tiểu mục bảng cho phù hợp; Khơng có khơng ghi ) vii TT Nội dung Xây dựng đề cương chi tiết Thu thập viết tổng quan tài liệu Thu thập tư liệu (mua, thuê) Dịch tài liệu tham khảo (số trang x đơn giá) Viết tổng quan tư liệu Điều tra, khảo sát, thí nghiệm, thu thập số liệu, nghiên cứu Chi phí tàu xe, cơng tác phí Chi phí th mướn Chi phí th khốn chun mơn (có giá trị từ 2.000.000 VNĐ/đề tài trở lên phải có hợp đồng th khốn chun mơn, giá trị nhỏ 2.000.000 VNĐ/đề tài phải có bảng ký nhận) Chi phí hoạt động chun mơn Th, mua sắm trang thiết bị, nguyên vật liệu Thuê trang thiết bị Mua trang thiết bị Mua nguyên vật liệu, cây, Viết báo cáo khoa học, nghiệm thu Viết báo cáo Hội thảo Nghiệm thu Chi khác Mua văn phịng phẩm In ấn, photocopy Quản lý phí Tổng kinh phí Tổng kinh phí viết chữ: Khơng Kinh phí Khơng 21 Tài liệu tham khảo để viết đề cương - Tài liệu tiếng Việt + TS Đỗ Năng Tồn TS Phạm Việt Bình, Giáo trình xử lý ảnh.: Đại Học Thái Nguyên + PGS.TS Nguyễn Quang Hoan, Xử Lý Ảnh.: Học Viện Công Nghệ Bưu Chính Viễn Thơng - Tài liệu tiếng Anh + Barnich, O and Van Droogenbroeck Vibe: A universal background subtraction algorithm for video sequences IEEE Transactions on Image Processing, 2011 + Ye Song, Na Fu, Xiaoping Li, Qiongxiu Liu, “Fast moving object detection using improved Gaussian Mixture method” ,2014 viii Lấy ảnh từ video Chuyển sang ảnh xám Trừ So sánh ngưỡng Làm đầy đối tượng Cập nhật ảnh Ảnh Phát khối N Bộ lọc Gaussain Dán nhãn khối, đóng khung Vượt qua đường ảo Y Đếm Hình 3.1 Lưu đồ giải thuật chương trình 13 3.4 Chương trình thực - Phụ lục 14 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 Gaussain, đường line ảo đặt hai phần ba khung ảnh đạt kết sau: 4.1 Kết trừ - Kết trừ cho kết tốt, phát đủ số lượng xe chạy đường, bám đối tượng tốt Tuy nhiên ảnh hưởng nhiễu ánh sáng chuyển động cịn rời rạc, chưa thành khối nên gây đếm sai Hình 4.1 Ảnh sau trừ 4.2 Kết làm đầy đối tượng - Kết sau làm đầy đối tượng, đối tượng rõ nét, khơng cịn phân tán Có phân biệt rõ nét đối tượng chuyển động background Tuy nhiên, đường biên đối tượng nhiều góc cạnh cịn tồn nhiễu 15 Hình 4.2 Ảnh sau làm đầy 4.3 Kết làm mịn đường biên - Kết sau làm mịn đường biên đối tượng: Các đối tượng thành khối (Blobs) dễ dàng xử lý như: dán nhãn, đóng khung, lấy tâm…Tuy nhiên nhiễu chưa xử lý Hình 4.3 Ảnh sau làm mịn đường biên 16 4.4 Kết dùng lọc Gaussain - Kết sau dùng lọc Gaussian để khử nhiễu: Nhiễu loại bỏ hoàn tồn Khung ảnh cịn khối (Blobs) đối tượng chuyển động theo vết tốt Hình 4.4 Ảnh sau dùng lọc Gaussain 4.5 Kết đếm số lượng xe lưu thông - Kết đếm xe lưu thông theo chiều bên phải: Các xe theo vết đếm xác 17 Hình 4.5 Ảnh góc ban đầu Hình 4.6 Khi chưa có xe vượt qua đường ảo 18 Hình 4.7 Khi có xe vượt qua đường ảo (nhãn 0) số đếm nhảy lên Hình 4.8 Khi có xe vượt qua đường ảo (nhãn 10) số đếm nhảy lên 19 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 trừ Background Subtraction, theo vết đối tượng Blobtracker kết hợp với kỹ thuật lập trình C++ Tơi áp dụng thành cơng thuật tốn trừ theo vết đối tượng vào toán giám sát số lượng xe lưu thông đường Xây dựng mô thành công phần mềm đếm số lượng xe di chuyển đường Đặc biệt chương trình xử lý ảnh động, lấy trực tiếp từ liệu video 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 giám sát lưu lượng xe 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 xe nhiễu Điều cho thấy thuật toán trừ dễ bị ảnh hưởng nhiễu môi trường, rung, đặ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 trừ 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 giám sá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 giám sát số lượng xe, kiểm tra an ninh, nhận dạng biển số xe, đo tốc độ xe… - Kết nối với hệ thống Camera IP để xây dựng trung tâm giám lưu lượng xe tuyến đườ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 tốn khác để có tỷ lệ giám sát xác 20 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] PGS.TS Hồng Xn Bình, Nghiên cứu hệ thống sử dụng camera tự động phát bám theo đối tượng chuyển động, Đại học Hàng Hải, 2012 [3] Tạ Thị Ái Nhi, Phát theo vết người từ liệu video, Đại học Đà Nẵng, 2012 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 21 PHỤ LỤC Đoạn chương trình lấy mẫu khn mặt // main.cpp #include #include #include #include #include #include "Blob.h" #define SHOW_STEPS // global variables /////////////////////////////////////////////////////////////////////////////// const cv::Scalar SCALAR_BLACK = cv::Scalar(0.0, 0.0, 0.0); const cv::Scalar SCALAR_WHITE = cv::Scalar(255.0, 255.0, 255.0); const cv::Scalar SCALAR_YELLOW = cv::Scalar(0.0, 255.0, 255.0); const cv::Scalar SCALAR_GREEN = cv::Scalar(0.0, 200.0, 0.0); const cv::Scalar SCALAR_RED = cv::Scalar(0.0, 0.0, 255.0); void matchCurrentFrameBlobsToExistingBlobs(std::vector &existingBlobs, std::vector ¤tFrameBlobs); void addBlobToExistingBlobs(Blob ¤tFrameBlob, std::vector &existingBlobs, int &intIndex); void addNewBlob(Blob ¤tFrameBlob, std::vector &existingBlobs); double distanceBetweenPoints(cv::Point point1, cv::Point point2); void drawAndShowContours(cv::Size imageSize, std::vector contours, std::string strImageName); void drawAndShowContours(cv::Size imageSize, std::vector blobs, std::string strImageName); bool checkIfBlobsCrossedTheLine(std::vector &blobs, int &intHorizontalLinePosition, int &carCount); void drawBlobInfoOnImage(std::vector &blobs, cv::Mat &imgFrame2Copy); void drawCarCountOnImage(int &carCount, cv::Mat &imgFrame2Copy); /////////////////////////////////////////////////////////////////////////////////////////////////// int main(void) { cv::VideoCapture capVideo; cv::Mat imgFrame1; cv::Mat imgFrame2; std::vector blobs; cv::Point crossingLine[2]; int carCount = 0; // // capVideo.open("CarsDrivingUnderBridge.mp4"); capVideo.open("IMG_4625.MOV"); capVideo.open("IMG_4583.MOV.mp4"); if (!capVideo.isOpened()) { std::cout 30 && possibleBlob.dblCurrentDiagonalSize > 60.0 && (cv::contourArea(possibleBlob.currentContour) (double)possibleBlob.currentBoundingRect.area()) > 0.50) { currentFrameBlobs.push_back(possibleBlob); } } / drawAndShowContours(imgThresh.size(), currentFrameBlobs, "imgCurrentFrameBlobs"); if (blnFirstFrame == true) { for (auto ¤tFrameBlob : currentFrameBlobs) { blobs.push_back(currentFrameBlob); } } else { matchCurrentFrameBlobsToExistingBlobs(blobs, currentFrameBlobs); } drawAndShowContours(imgThresh.size(), blobs, "imgBlobs"); imgFrame2Copy = imgFrame2.clone(); drawBlobInfoOnImage(blobs, imgFrame2Copy); bool blnAtLeastOneBlobCrossedTheLine intHorizontalLinePosition, carCount); = checkIfBlobsCrossedTheLine(blobs, if (blnAtLeastOneBlobCrossedTheLine == true) { cv::line(imgFrame2Copy, crossingLine[0], crossingLine[1], SCALAR_GREEN, 2); } else { cv::line(imgFrame2Copy, crossingLine[0], crossingLine[1], SCALAR_RED, 2); } drawCarCountOnImage(carCount, imgFrame2Copy); cv::imshow("imgFrame2Copy", imgFrame2Copy); cv::waitKey(0); currentFrameBlobs.clear(); imgFrame1 = imgFrame2.clone(); if ((capVideo.get(CV_CAP_PROP_POS_FRAMES) capVideo.get(CV_CAP_PROP_FRAME_COUNT)) { capVideo.read(imgFrame2); } else { std::cout = 5) { existingBlob.blnStillBeingTracked = false; } } } /////////////////////////////////////////////////////////////////////////////////////////////////// void addBlobToExistingBlobs(Blob ¤tFrameBlob, std::vector &existingBlobs, int &intIndex) { existingBlobs[intIndex].currentContour = currentFrameBlob.currentContour; existingBlobs[intIndex].currentBoundingRect = currentFrameBlob.currentBoundingRect; existingBlobs[intIndex].centerPositions.push_back(currentFrameBlob.centerPositions.back()); existingBlobs[intIndex].dblCurrentDiagonalSize = currentFrameBlob.dblCurrentDiagonalSize; existingBlobs[intIndex].dblCurrentAspectRatio = currentFrameBlob.dblCurrentAspectRatio; existingBlobs[intIndex].blnStillBeingTracked = true; existingBlobs[intIndex].blnCurrentMatchFoundOrNewBlob = true; } /////////////////////////////////////////////////////////////////////////////////////////////////// void addNewBlob(Blob ¤tFrameBlob, std::vector &existingBlobs) { currentFrameBlob.blnCurrentMatchFoundOrNewBlob = true; existingBlobs.push_back(currentFrameBlob); } /////////////////////////////////////////////////////////////////////////////////////////////////// double distanceBetweenPoints(cv::Point point1, cv::Point point2) { int intX = abs(point1.x - point2.x); int intY = abs(point1.y - point2.y); return(sqrt(pow(intX, 2) + pow(intY, 2))); } /////////////////////////////////////////////////////////////////////////////////////////////////// void drawAndShowContours(cv::Size imageSize, std::vector contours, std::string strImageName) { cv::Mat image(imageSize, CV_8UC3, SCALAR_BLACK); cv::drawContours(image, contours, -1, SCALAR_WHITE, -1); cv::imshow(strImageName, image); } /////////////////////////////////////////////////////////////////////////////////////////////////// void drawAndShowContours(cv::Size imageSize, std::vector blobs, std::string strImageName) { cv::Mat image(imageSize, CV_8UC3, SCALAR_BLACK); std::vector contours; for (auto &blob : blobs) { if (blob.blnStillBeingTracked == true) { contours.push_back(blob.currentContour); } } cv::drawContours(image, contours, -1, SCALAR_WHITE, -1); cv::imshow(strImageName, image); } /////////////////////////////////////////////////////////////////////////////////////////////////// bool checkIfBlobsCrossedTheLine(std::vector &blobs, int &intHorizontalLinePosition, int &carCount) { bool blnAtLeastOneBlobCrossedTheLine = false; for (auto blob : blobs) { if (blob.blnStillBeingTracked == true && blob.centerPositions.size() >= 2) { int prevFrameIndex = (int)blob.centerPositions.size() - 2; int currFrameIndex = (int)blob.centerPositions.size() - 1; if (blob.centerPositions[prevFrameIndex].y > blob.centerPositions[currFrameIndex].y

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan