- Chuẩn bị DVR để phát trực tuyến RTSP
- Chuẩn bị Raspberry Pi của bạn
- Cài đặt OpenCV và các thư viện khác trên Raspberry Pi
- Lập trình Raspberry Pi để truyền video RTSP từ CCTV
- Thử nghiệm Trình xem camera quan sát Raspberry Pi
Hầu hết các nơi làm việc và tòa nhà thương mại ngày nay đều được lắp đặt hệ thống giám sát CCTV để theo dõi các hoạt động. Nhưng thường thì rất khó để cơ quan có liên quan hoặc các cá nhân an ninh theo dõi nguồn cấp dữ liệu trực tiếp của tất cả các camera liên tục để tìm kiếm hoạt động đáng ngờ. Với tầm nhìn máy tính và công nghệ máy học đang phát triển nhanh chóng, đã đến lúc chúng ta phải làm cho hệ thống camera quan sát của mình thông minh hơn. Trong bài viết này, chúng tôi sẽ thảo luận về cách lấy nguồn cấp dữ liệu video từ một DVR hiện có (như Hikvision DVR) thông qua phát trực tuyến RTSP với Raspberry pi bằng Python và OpenCV. Khi chúng tôi có được điều này, chúng tôi sẽ có thể tận dụng sức mạnh của OpenCV trên các nguồn cấp dữ liệu video này để phát hiện một đối tượng cụ thể, đọc biển số xe, nhận dạng khuôn mặt và những gì không!
Vì lợi ích của hướng dẫn này, tôi sẽ sử dụng đầu ghi hình CCTV 4 kênh Hikvision đã được lắp đặt trong tòa nhà. Chúng tôi sẽ truyền trực tuyến tất cả 4 màn hình camera đến Raspberry và hiển thị nó trên màn hình cảm ứng 5 inch, nơi người dùng có thể chuyển đổi giữa từng kênh theo yêu cầu. Tôi biết điều này không nhiều, xem xét sức mạnh của OpenCV và tôi có kế hoạch mở rộng quy mô với tính năng phát hiện chuyển động, cảnh báo video bugler, theo dõi người, v.v. nhưng hãy để tất cả những điều đó cho một hướng dẫn khác.
Chuẩn bị DVR để phát trực tuyến RTSP
Trước khi chúng ta đi sâu vào phần cứng pi raspberry và mã python, điều quan trọng là phải kiểm tra xem DVR có hỗ trợ RTSP hay không và cách truy cập nó. Tôi đã dành phần lớn thời gian của mình ở đây vì quy trình có vẻ khác nhau đối với từng loại DVR và bạn phải làm và rất nhiều lần truy cập và thử. Nhưng một khi bạn tìm ra điều này, nó hoạt động như một sự quyến rũ mỗi lần.
Điều đầu tiên, hãy đảm bảo rằng bạn biết tên người dùng và mật khẩu của hệ thống DVR của bạn và nó được kết nối với internet. Cũng trong hướng dẫn này, tôi sẽ chỉ phát trực tuyến RTSP từ mạng cục bộ, nếu bạn có IP tĩnh, bạn có thể thực hiện chuyển tiếp cổng và thực hiện tương tự cho các mạng khác. Nhưng đối với hướng dẫn này có liên quan, chúng tôi sẽ thực hiện mọi thứ bên trong mạng cục bộ.
Bước 1: Tìm địa chỉ IP của DVR của bạn. Khi DVR được kết nối với Internet, nó sẽ được gán địa chỉ IP riêng. Bạn có thể tìm thấy địa chỉ IP này từ trang cấu hình bộ định tuyến hoặc từ chính màn hình DVR của bạn (giả sử bạn có màn hình được kết nối với DVR). Địa chỉ IP của bộ định tuyến của tôi là http://192.168.11.110/ (đã thay đổi vì lý do an toàn)
Bước 2: Mở bất kỳ trình duyệt web nào bạn chọn, nhập địa chỉ IP và nhấn enter. Bạn sẽ được đưa đến trang đăng nhập DVR. Nơi bạn phải nhập tên người dùng (của tôi đã được thay đổi) và mật khẩu cho DVR của bạn. Tên người dùng mặc định sẽ là quản trị viên, nhưng mật khẩu bạn phải biết. Màn hình đăng nhập của tôi cho DVR được hiển thị bên dưới, hình thức của bạn có thể khác.
Bước 3: Sau khi đăng nhập thành công, hãy tìm số cổng RTSP trên DVR của bạn, hầu hết các trường hợp, giá trị mặc định sẽ là 554 nhưng nó có thể thay đổi. Trong khi bạn ở đây, hãy thử cài đặt cấu hình để kiểm tra xem có tùy chọn nào để bật RTSP hay không, nếu không, bạn có thể bỏ qua. Bạn phải dành một chút thời gian ở đây vì quy trình này khác nhau dựa trên DVR.
Bước 4: Chuẩn bị liên kết RTSP của bạn, liên kết RTSP cơ bản sẽ có định dạng sau-
rtsp: //
Một lần nữa, nó phụ thuộc vào loại DVR, bạn có thể sử dụng google để tìm loại phù hợp với bạn. Cái đã làm việc cho có định dạng bên dưới, bạn cũng có thể thử với cái này-
rtsp: //
Ở đâu
rtsp: // admin: [email protected]: 554 / Streaming / Channels / 202 /
Bước 5: Phát luồng trên VLC để đảm bảo kết nối RTSP của bạn đang hoạt động. Cài đặt VLC trên máy tính được kết nối với cùng mạng với DVR, khởi chạy nó và nhấn Ctrl + N để phát trực tuyến qua mạng. Nhập URL như hình bên dưới và nhấn OK.
Nếu liên kết RTSP đang hoạt động đúng cách, bạn sẽ thấy luồng trực tiếp của camera quan sát của mình trên đầu phát VLC như hình dưới đây. Nếu nó báo lỗi thì bạn phải tìm ra liên kết chính xác.
Khi điều này được thực hiện, chúng tôi không còn cần phải nói về DVR của chúng tôi cho phép tiếp tục với Raspberry pi của chúng tôi.
Chuẩn bị Raspberry Pi của bạn
Tiếp theo, chúng ta cần thiết lập pi raspberry của mình với Màn hình 5 inch. Tôi sẽ không đi vào chi tiết về điều đó vì chúng tôi đã đề cập đến điều đó nhiều lần. Bạn có thể đọc các bài viết sau để được hướng dẫn-
- Bắt đầu với Raspberry Pi
- Màn hình 5 inch giao diện với Raspberry Pi
Chúng tôi đang sử dụng Raspberry Pi 3 B + với HĐH Debian Buster chạy trong đó. Bạn cũng nên sử dụng Pi 4 nếu có thể và cũng có thể thêm một số tùy chọn làm mát như tản nhiệt hoặc Quạt vì tôi nhận thấy nhiệt độ đạt gần 70 * C. Tôi đã không làm theo bất kỳ quy trình làm mát nào cho đến bây giờ và thiết lập của tôi trông như thế này-
Cài đặt OpenCV và các thư viện khác trên Raspberry Pi
Bước tiếp theo là cài đặt OpenCV trên Raspberry Pi. Trước đây chúng ta đã thảo luận về cách biên dịch OpenCV trên Raspberry pi.
- Cài đặt OpenCV trên Raspberry Pi
- Bắt đầu với OpenCV
Bạn có thể theo liên kết trên và biên dịch OpenCV bằng Cmake hoặc chỉ cần cài đặt nó bằng phương thức apt-get. Tôi sẽ giới thiệu sau nếu bạn không thích lập trình OpenCV rất nghiêm túc. Tôi đã sử dụng các lệnh sau để cài đặt OpenCV.
sudo apt update sudo apt install python3-opencv
Trong chương trình của mình, chúng tôi cũng sẽ sử dụng thư viện “cvui” để tạo giao diện người dùng cơ bản với hai nút cho phép chúng tôi điều hướng giữa bốn màn hình. Để cài đặt cvui, hãy làm theo lệnh dưới đây.
Pip Python3 cài đặt cvui
Với cả hai gói được cài đặt, chúng ta có thể vào chương trình chính. Đảm bảo rằng cả hai gói đã cài đặt đang hoạt động, hãy cố gắng nhập chúng từ cổng lệnh của Pi.
Lập trình Raspberry Pi để truyền video RTSP từ CCTV
Chương trình hoàn chỉnh cho dự án này có thể được tìm thấy ở cuối trang này. Giải thích tương tự như sau. Chúng tôi bắt đầu chương trình bằng cách bao gồm các tệp tiêu đề bắt buộc.
nhập cv2 nhập cvui
Phần tiếp theo của chương trình yêu cầu một số chỉnh sửa. Bạn phải nhập tên người dùng và mật khẩu của DVR của bạn. Đối với màn hình 5 inch, chiều rộng và chiều cao lần lượt là 800 và 480, vì vậy chúng tôi đã nhập giống nhau.
rtsp_username = "admin" rtsp_password = "aswinth347653" width = 800 height = 480 cam_no = 1
Tiếp theo, chúng ta có một chức năng gọi là tạo camera sẽ được sử dụng mỗi khi chúng ta thay đổi số camera cần xem.
def create_camera (channel): rtsp = "rtsp: //" + rtsp_username + ":" + rtsp_password + "@ 192.168.29.100: 554 / Streaming / channel /" + channel + "02" cap = cv2.VideoCapture () cap.open (rtsp) cap.set (3, 640) # Số ID cho chiều rộng là 3 cap.set (4, 480) # Số ID cho chiều cao là 480 cap.set (10, 100) # Số ID cho độ sáng là 10qq trở lại nắp
Bên trong vòng lặp while chính, chúng tôi có chương trình của mình để đọc một khung hình từ thiết bị chụp và chuyển đổi nó thành toàn màn hình. Cửa sổ hiển thị trong chương trình của chúng ta sẽ được gọi là màn hình.
thành công, current_cam = cam.read () dim = (width, height) Full_frame = cv2.resize (current_cam, dim, interpolation = cv2.INTER_AREA) cv2.nameWindow ('screen', cv2.WINDOW_NORMAL) cv2.setWindowProperty ('screen ', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
Tiếp theo là chúng ta có mã cho hai nút sẽ được đặt trên màn hình. Lệnh cvui.button được sử dụng để đặt nút ở vị trí cần thiết và lệnh cvui.mouse được sử dụng để phát hiện nhấp chuột. Chúng tôi có hai nếu báo cáo cho hai nút nếu nút được nhấp, tương ứng nếu tuyên bố sẽ được thực thi.
if (cvui.button (Full_frame, width - 100, height - 40, "Next") và cvui.mouse (cvui.CLICK)): print ("Next Button Pressed") cvui.init ('screen') cam_no = cam_no +1 if (cam_no> 4): cam_no = 1 del cam cam = create_camera (str (cam_no)) if (cvui.button (Full_frame, width - 200, height - 40, "Previous") và cvui.mouse (cvui. NHẤP VÀO)): print ("Nút bấm trước") cvui.init ('màn hình') cam_no = cam_no - 1 if (cam_no <1): cam_no = 4 del cam cam = create_camera (str (cam_no))
Bên trong nếu tuyên bố, dựa trên các nút chúng tôi hoặc tăng hoặc giảm cam_no đếm và sau đó xóa các cam hiện có và tạo ra một cam mới bằng cách sử dụng chức năng chúng tôi đã thảo luận ở trên. Ngoài ra, hãy lưu ý rằng cvui.init phải gọi mọi lúc để làm mới màn hình giao diện người dùng.
Phần cuối cùng của mã là hiển thị khung dưới dạng đầu ra và để thoát khỏi màn hình đầu ra khi nhấn q. Chúng tôi chỉ chờ một lần gõ phím và nếu phím là 'q', chúng tôi sẽ phá hủy tất cả các cửa sổ.
cv2.imshow ('screen', Full_frame) if cv2.waitKey (1) & 0xFF == ord ('q'): cv2.destroyAllWindows () break
Thử nghiệm Trình xem camera quan sát Raspberry Pi
Quá trình kiểm tra mã diễn ra khá dễ dàng, tăng sức mạnh cho số pi và khởi chạy mã python được cung cấp ở cuối trang này. Đảm bảo rằng bạn đã nhập đúng thông tin đăng nhập để liên kết RTSP hoạt động. Nếu muốn an toàn, bạn cũng có thể thử sử dụng trình phát VLC trên Pi được cài đặt sẵn trên buster OS.
Nếu nó hoạt động trên VLC, thì chúng ta có thể chắc chắn rằng pi của chúng ta được kết nối với cùng một mạng và liên kết RTSP đang hoạt động bình thường. Sau đó, mở chương trình được cung cấp ở cuối trang này và khởi chạy nó bằng bất kỳ IDE python nào. Nếu thông tin đăng nhập được nhập chính xác, bạn sẽ thấy màn hình sau. Hiển thị nguồn cấp dữ liệu camera trực tiếp với hai nút ở dưới cùng.
Vì màn hình có màn hình cảm ứng TFT, bạn có thể chỉ cần chạm vào nút “trước đó” và “tiếp theo” để chuyển sang máy ảnh tiếp theo. Chương trình được viết để lặp lại giữa bốn camera đầu tiên, bạn có thể dễ dàng sửa đổi nó nếu có nhiều hơn 4 camera được kết nối với DVR của bạn.
Hoạt động hoàn chỉnh của dự án này có thể được tìm thấy trong video được liên kết bên dưới. Hy vọng bạn thích hướng dẫn và học được điều gì đó hữu ích nếu bạn có bất kỳ câu hỏi nào, hãy để lại chúng trong phần bình luận hoặc bạn cũng có thể sử dụng diễn đàn của chúng tôi để đăng các câu hỏi khác của bạn. Ngoài ra, tôi đang có kế hoạch thêm tính năng phát hiện chuyển động và lưu video vào thiết lập này, vì vậy hãy chú ý theo dõi điều đó.