Bên cạnh Webcam thì Camera IP cũng rất là thông dụng, nó có nhiều ưu điểm hơn hẳn Webcam. Cụ thể là:
– Kết nối tới khoảng cách xa hơn bằng wifi hoặc cáp mạng
– Camera IP được thiết kế để làm việc liên tục nhiều ngày, nhiều giờ
– Camera IP có nhiều chức năng hơn: có lens, có hồng ngoại nhìn đêm, có chức năng chống ngược sáng,…
– Hỗ trợ thẻ nhớ ngoài để quay phim trong trường hợp không kết nối được
Và các ứng dụng thương mại cũng sử dụng camera IP là chủ yếu. Ít khi dùng webcam cho thương mại do webcam thiết kế cho nhu cầu cá nhân. Do đó bài này sẽ hướng dẫn các bạn kết nối camera IP trong OpenCV.
Tìm link stream của camera IP
Để kết nối được camera IP các bạn làm theo bài viết https://thigiacmaytinh.com/cach-tim-stream-link-cua-camera-ip/
Sau khi tìm được link & test bằng VLC media player chạy được ok thì mới sang bước tiếp theo.
Viết code để load hình ảnh từ camera
Việc load ảnh từ camera IP khá đơn giản giống như kết nối tới webcam. Chỉ cần truyền địa chỉ camera vào VideoCapture là có thể lấy hình ảnh được rồi.
1 2 3 4 5 6 7 8 9 10 11 12 |
cv::VideoCapture cap = cv::VideoCapture("rtsp://admin:admin@192.168.0.100/live.sdp", cv::CAP_FFMPEG); if (cap.isOpened()) // check if we succeeded { cv::Mat frame; while (true) { cap >> frame; cv::imshow("camera IP", frame); if (cv::waitKey(30) == VK_ESCAPE) break; } } |
Lưu ý:
– Phải truyền tham số cv::CAP_FFMPEG khi khởi tạo VideoCapture để tránh hình ảnh bị lag
– Phải copy file opencv_ffmpeg320.dll vào thư mục chứa file exe (giả sử đang dùng opencv 3.2.0)
Download
Chương trình viết bằng OpenCV với ngôn ngữ C++, dùng để test camera. Cách sử dụng: mở file config.ini ra điền các thông số:
num_camera: số lượng camera cần xem
camera_0: ID của camera hoặc link stream của camera. Ví dụ: camera_0 = 0 hoặc camera_0 = rtsp://admin:admin@192.168.0.100/live.sdp Camera có thể từ camera_0, camera_1,…
Chào admin! Cảm ơn bài viết của admin! Nhưng em có làm theo hướng dẫn thì không làm được ạ! Em dùng loại giá rẻ trên lazada! Không biết anh có lời khuyên gì hay không ạ?
Hay anh cho em cái loại IP camera anh đang xài á :D, với chỗ mua luôn được không ạ? Em cảm ơn admin nhiều ^^
Bạn đang dùng loại nào?
Loại camera mình sử dụng khá đa dạng: Siepem, Hik Vision, VivoTek. Có trục trặc gì thì liên hệ qua FB cuối trang
Hi ad! Cảm ơn anh đã hỗ trợ nhiệt tình em trong thời gian qua :D! Em đã kết nối được rồi và sau đây em xin chia sẻ một chút về vấn đề của em gặp phải: Em đang làm Cam Siepem S6203-WR, nên chỉ chia sẻ về nó, còn dòng khác em k chắc ạ 😀
+Lấy được Cổng (Port): Khi mình dùng iSpy á thì nó k hiện ra đâu! Bởi vì Cam của mình mặc định nó ở cổng 8888. Camera Siepem có trang Web của hãng, có các phần mềm phụ kiện để tìm được địa chỉ IP của Cam (Với điều kiện là kết nối dây), nên mình dùng tool đó tìm thì ra Port:8888.
+Tiếp tục dùng Ispy: Sau khi biết được cổng của nó rồi, mình lại theo hướng dẫn ban đầu khi mua Cam về để kết nối Wifi để nhận địa chỉ IP, sau đó mình quét bằng iSpy, thêm cổng mình vừa mới tìm được (vd: 8888), và làm như tiếp bài viết nhé ! ^^
+Đọc dữ liệu trong OpenCV: Nếu như Ispy tìm ra được link của giao thức rstp thì có thể thử theo cách của chủ thớt(Mình k tìm ra nên chưa thử được), còn nếu tìm ra link http, cũng nên tiếp tục thử như bài viết :v. Nếu lỗi thì mình vào server của Cam, mình chọn JPEG Mode (Ở mình nó có :D), mình Inspect khung hình (Kiểm tra html của nó), sẽ thấy , lấy và đọc ở dạng ảnh chứ k phải là VideoCap nữa!
+Lưu ý: OpenCV không thể đọc ảnh từ URL, nên phải dùng thư viện bên thứ 3 là curlLib, cụ thể xem ở link sau: http://answers.opencv.org/question/91344/load-image-from-url/
Cảm ơn ad lần nữa! Và chúc mọi người làm tốt ạ! ^^
Cảm ơn bạn rất nhiều
Chào bạn! Mình cũng đang sử dụng Cam giống bạn. Mình đã tìm được link stream, nhưng chỉ là http, thử theo cách ad thì không thành công. Bạn có thể giải thích rõ hơn chỗ vào server của cam không ?
Bạn có thể vào group FB đặt câu hỏi kèm theo hình ảnh lỗi để mình dễ chẩn đoán https://www.facebook.com/groups/thigiacmaytinh
Cảm ơn bạn nhiều
Chao anh, Anh co the huong dan phan nay voi c# khong, thanks.
Code C# ở đây nhé
https://thigiacmaytinh.com/source-code-ispy-rut-gon/
bộ code này em đã nghiên cứu rồi nhưng cách xây dựng rất phức tạp. Quá nhiều chức năng. Anh có thể hướng dẫn em kết nối vơi một form đơn giản không ạ!. Rất biết ơn anh. Kiểu giống như đoạn C++ phía trên.
Nếu làm form đơn giản có thể sử dụng lib Aforge với C# để lấy hình ảnh từ webcam
Em Đang theo một dự án có liên quan đến IP camera, khổ nổi bị vướng ở chổ lấy hình ảnh này. Em có thử sử dụng qua các mẩu code của SDK nhưng bị lag, kết nối rất chậm. ISPY rất tốt, Nhưng khổ nổi cách xây dựng phức tạp, mà em thì còn non tay. Rất mong nhận được sự hướng dẫn của anh.
Phải bỏ công ra tìm hiểu thôi, chứ lib dễ sử dụng thì chậm, lib nhanh thì phải phức tạp. Nên tới đây là bạn phải nỗ lực thôi
Thanks Anh
Anh cho em xin của python với.
Code example của Python trong folder này nhé: https://github.com/opencv/opencv/tree/master/samples/python
Với anh cho em hỏi em chạy videocapture thì xuất hiện lỗi opencv_ffmpeg320.