Webcam là thiết bị input phổ biến nhất, rẻ tiền nhất so với các loại camera khác. Tầm 150k là đã mua được, loại tốt cũng khoảng 500k đến 1 triêu. Do đó Webcam phù hợp nhất với sinh viên và người nghiên cứu không chuyên.
Webcam bình thường tầm 13-14 fps (frame per second) chỉ phù hợp với các ứng dụng đơn giản. Muốn làm chuyên nghiệp cần mua những loại webcam tốt, thậm chí là camera IP để dễ dàng hơn trong việc giải quyết bài toán đặt ra.
Kinh nghiệm cho thấy phần cứng tốt sẽ lập trình dễ dàng hơn. Nếu không đầu tư cho phần cứng thì tính ra còn lỗ hơn về công sức, và đôi khi bế tắc.
OpenCV cung cấp sẵn class cv::VideoCapture() với rất nhiều khả năng: đọc webcam, đọc camera IP và video. Do 3 nguồn đó đều có chung đặc điểm là liên tục trả về hình ảnh (gọi là frame) nên dùng chung class.
Kiểm tra webcam trước khi lập trình
Cách 1: Dùng web kiểm tra, các bạn vào trang web https://webcamtests.com/fps để play webcam trực tiếp từ website
Cách 2: sử dụng phần mềm Webcam viewer portable V1.0 để kiểm tra
Đọc hình ảnh
Code bên dưới lấy hình ảnh từ camera 0, mỗi khi lấy hình ảnh xong sẽ dừng lại 30 milisecond để giới hạn còn 30 fps.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
cv::VideoCapture cap = cv::VideoCapture(0); if (cap.isOpened()) // check if we succeeded { cv::Mat frame; while (true) { cap >> frame; cv::imshow(windowName, frame); cv::waitKey(30); } } else { PrintError("Not found any camera"); } |
Có 2 cách đọc hình ảnh và đều cho ra kết quả như nhau:
1 2 |
cap >> frame; cap.read(frame); |
Khi lấy được hình ảnh công việc tiếp theo là xử lý, tùy theo yêu cầu mà thời gian xử lý khác nhau. 1 ứng dụng được gọi là xử lý thời gian thực (realtime process) phải đạt tối thiểu 10fps. Có nghĩa là 1 frame bạn phải xử lý tối đa 100ms, nếu nhiều hơn phải xử lý đa luồng.
Lưu ý: phải copy file opencv_ffmpeg320.dll vào cùng folder với file exe (giả sử đang sử dụng opencv 3.2.0)
Các tham số khác
Các tham số bên dưới thiết lập cho phần cứng của webcam
Set FPS cho camera, tất nhiên là giá trị phải nhỏ hơn FPS của camera vì cao hơn là vô nghĩa.
1 2 |
cv::VideoCapture cap = cv::VideoCapture(cameraID); cap.set(CV_CAP_PROP_FPS, 25); |
Set size của hình ảnh input
1 2 3 |
cv::VideoCapture cap = cv::VideoCapture(cameraID); cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280); cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720); |
Và còn nhiều tham số khác, tuy nhiên ít dùng nên không post lên đây.
Download
GitHub: https://github.com/thigiacmaytinh/TGMTcpp
Trong repo có nhiều project example, bạn chỉ cần build WebcamViewer.sln là được
Đọc thêm: Kết nối camera IP trong opencv
Ad có thể phát triên code này để lấy hình tử Camera sau đó xử lí bằng các phương pháp Tracking hoặc Template thì sẽ có nhiều ứng dụng thực tế. Chờ admin làm bài tiếp theo về xử lí ảnh từ video Camera.
Bạn xem các video về tracking ở link youtube cuối trang web nhé
deep learning YOLO là 1 ý tưởng hay
Ad có làm bài nào về phát hiện sản phẩm qua xử lí camera ko z
Có làm 1 dự án về giám sát sản xuất túi khí xe hơi, tuy nhiên dự án thương mại thì không được chia sẻ
ad rất rộng rãi chia ssẻ bài phát hiện biển số xe
phần hiển thị link em like nhưng không thấy ạ
Bạn F5 lại trang web nhé, Facebook mới đổi API
dạ em cảm ơn ạ