Kết nối camera IP trong opencv

camera-ip

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.

Các bước thực hiện gồm:
– Kết nối camera tới máy tính
– Tìm link stream của camera IP
– Viết code để load hình ảnh từ camera

Kết nối camera tới máy tính

Camera có thể kết nối bằng wifi hoặc cáp mạng, về bản chất là đều sử dụng giao thức mạng để truyền dữ liệu. Đầu tiên phải xác định được camera có kết nối tới máy tính được không, sau đó mới kết nối vào phần mềm.

Để tìm IP của camera nhanh nhất, sử dụng tool IP Scanner để xem camera có địa chỉ bao nhiêu. Nếu tìm thấy cam thì mở Internet Explorer lên, gõ địa chỉ IP vào (lưu ý tất cả các hãng đều hỗ trợ tốt IE). Nếu IE hiển thị thông tin từ webcam như là hình ảnh cam hoặc menu đăng nhập vào cam là ok.

Tìm link stream của camera IP

Hiện nay có hàng chục hãng camera khác nhau, nổi tiếng nhất có thể kể đến Vivotek, Hik Vision, Questek, Siepem,… Mỗi camera lại có link stream khác nhau, thí dụ:

http://192.168.0.100/videostream.cgi?loginuse=admin&loginpas=admin
rtsp://192.168.0.100:554/PSIA/Streaming/channels/1?videoCodecType=H.264_HIGH
rtsp://192.168.0.100:554/PSIA/Streaming/channels/1?videoCodecType=MJPEG
rtsp://admin:hd543211@192.168.0.100/Streaming/Channels/1
rtsp://admin:admin@192.168.0.100/live.sdp

Lưu ý là với option khác nhau bạn có link stream khác nhau, giao thức khác nhau,… khá là mệt mỏi khi mới làm quen. May mắn là có 1 công cụ hỗ trợ sẵn cho các bạn là iSpy. Chương trình này sẽ giúp các bạn tìm kiếm link stream cho camera. Chương trình này cài đặt như các chương trình bình thường.

Dùng iSpy tìm stream của camera

Đầu tiên là các bạn kết nối camera vào máy tính, sau đó chạy chương trình iSpy. Khi chạy chương trình lên, các bạn chọn “Add -> Camera IP With Wizard”. Cửa số “Connect to IP cameras” hiện lên chọn “Not listed” (bởi vì không biết link stream mới cần tool này). Còn giao thức thì chọn rtsp hay http đều được vì opencv hỗ trợ hết. Tuy nhiên nên chọn rtsp vì giao thức này thiết kế riêng cho stream media.

Screenshot 2017-12-25 00.30.25

Sau khi ấn “Next” thì điền username và password của camera vào

Screenshot 2017-12-25 00.33.49

Đa số các dòng camera IP có username/password mặc định là admin/admin. Tuy nhiên camera HIK vision thì lại là admin/hd543211



Ấn “Next” sẽ hiện ra cửa sổ tìm kiếm, ấn nút “Scan Local Network” để bắt đầu tìm. Hình bên dưới là đã tìm được tất cả các thiết bị trong mạng LAN.
Screenshot 2017-12-25 00.42.56

Sau khi chọn đúng IP của camera IP thì ấn “Next”, chương trình sẽ liệt kê ra tất cả các stream link, bạn phải chọn cái nào phù hợp. Chọn 1 cái rồi ấn vào dòng chữ “Check and filter results” bên dưới. Kết quả scan là OK thì đó là stream link đúng.
Screenshot 2017-12-25 00.48.42

Ấn “Next” chương trình sẽ hiển thị hình ảnh lấy được từ stream. (hình ảnh ban đêm của camera hồng ngoại)
Screenshot 2017-12-25 00.59.31

Như vậy là đã tìm được link stream thành công, bạn có thể thử lại bằng cách dùng VLC player. Mở VLC player, chọn menu “Media -> Open Nework Stream (Ctrl + N)” để thử lại link.

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.

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,…

Source code read camera (Github)

Download iSpy
Source code iSpy (Github)
Source code iSpy rút gọn (Github)

16 Responses to Kết nối camera IP trong opencv

  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 ^^

    • vohungvi says:

      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

  2. 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 ạ! ^^

  3. Chi Nam Dao says:

    Chao anh, Anh co the huong dan phan nay voi c# khong, thanks.

  4. Chi Nam Dao says:

    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.

    • vohungvi says:

      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

  5. Chi Nam Dao says:

    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.

    • vohungvi says:

      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

  6. Chi Nam Dao says:

    Thanks Anh

  7. hphuc4244 says:

    Anh cho em xin của python với.

  8. hphuc4244 says:

    Với anh cho em hỏi em chạy videocapture thì xuất hiện lỗi opencv_ffmpeg320.

Leave a Reply