Truyền hình ảnh từ Camera bằng Raspberry Pi

Mô tả dự án: 

Khi đọc các bài viết về Intel Galileo, mình thấy có bài MJPEG Streamer khá hay. Và qua đây, mình cũng xin chia sẻ cách để chạy MJPEG Streamer trên Raspberry Pi để truyền hình ảnh từ Camera trong mạng LAN.

Cài đặt các gói cần thiết để build

sudo apt-get install libjpeg8-dev imagemagick libv4l-dev -y

Các bạn chạy đoạn lệnh trên sau khi đã update và upgrade nhé!

Cập nhập thư viện videodev.h

Mặc định Raspberry Pi và Intel Galileo đều không có thư viện videodev.h nữa mà là videodev2.h

Thư viện videodev2.h có thể được dùng như videodev.h vì vậy bạn chạy lệnh sau để tạo shortcut để biên dịch MJPG Streamer

sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h

Download mã nguồn MJPG Streamer

Bạn chạy dòng lệnh sau để tải về

wget http://sourceforge.net/code-snapshots/svn/m/mj/mjpg-streamer/code/mjpg-streamer-code-182.zip

 

Giải nén MJPG Streamer

Để giải nén MJPG Streamer, các bạn chạy dòng lệnh sau

unzip mjpg-streamer-code-182.zip

Biên dịch MJPG Streamer

MJPG Streamer có rất nhiều plugin đi thèm theo gói hướng dẫn của nó. Nhưng mình thấy không cần thiết phải biên dịch hết. Như trong bài MJPG Streamer của ksp, chúng ta chỉ cần stream camera lên web thôi mà!

cd mjpg-streamer-code-182/mjpg-streamer

make mjpg_streamer input_uvc.so output_http.so

Cài đặt MJPG Streamer để gọi toàn cục

Các bạn chạy các dòng lệnh sau

sudo cp mjpg_streamer /usr/local/bin

sudo cp output_http.so input_uvc.so /usr/local/lib/

sudo cp -R www /usr/local/www

Gắn webcam và kiểm tra

Bạn gắn webcam vào Raspberry Pi và chạy lệnh dmesg để kiểm tra camera đã được gắn hay chưa?

dmesg

Nếu có đoạn như hình này là được, bạn có thể stream được.

Xem device name của webcam của bạn.

ls /dev/video*

Nếu nó ra dạng như hình ví dụ là được

 

Streaming

Bạn hãy ghi lại dòng lệnh sau cho mỗi lần chạy webcam

 LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -quality 100 -f 30 -r 640x480" -o "/usr/local/lib/output_http.so -w /usr/local/www -p 8080"

Các thông số

-d <device name - chuỗi - mặc định /dev/video0>

-quality <chất lượng - số nguyên từ 1 - 100 - mặc định 75>

-f <frame per second - số nguyên từ 1 - 60 - mặc định 10>

-r <kích thước khung hình - chuỗi (xem hướng dẫn ở dưới)>

-p <port - số nguyên - từ 1 => 216 - 1>

Xem video streaming

Từ bây giờ, bạn có thể vào địa chỉ http://<địa chỉ IP của Raspi>:8080 để xem hình ảnh truyền trực tiếp từ camera của bạn rồi đấy. 

Để biết được các kích thức khung bình của camera, bạn chạy lệnh sau:

v4l2-ctl --list-formats-ext --device /dev/video0

Nếu màn hình stream là đen thui?

Lúc này, camera của bạn không hỗ trợ MJPEG, lúc đó, bạn phải mua một camera MJPEG như các dòng của hãng logitech (loại nào của hãng này cũng có hết).

Để kiểm tra camera có MJPEG hay không, bạn theo hướng dẫn sau:

v4l2-ctl --list-formats --device /dev/video0 | grep MJPEG

Chú thích

--device <device name - chuỗi - mặc định là /dev/video0

Nếu kết quả hiện ra là thì camera của bạn đã hỗ trợ mjpeg heart

Name        : MJPEG

Trong trường hợp bạn không có camera có hỗ trợ MJPEG thì cũng không sao, chỉ việc thêm tham số -y vào trong tham số input như sau.

LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -quality 100 -f 30 -r 640x480 -y" -o "/usr/local/lib/output_http.so -w /usr/local/www -p 8080

lên
11 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Lập trình nhúng trên Raspberry Pi bằng ngôn ngữ Javascript trong môi trường NodeJS - chìa khóa thành công

Với kinh nghiệm của một hardcore developer, đã từng dùng nhiều ngôn ngữ lập trình như C++, python, bash, js,... trên Raspberry Pi. Mình nhận thấy, Javascript trên NodeJS là một trong những ngôn ngữ lập trình "làm việc tốt nhất" trên Raspberry Pi. Vì sao? Vì đơn giản, nó chạy trong môi trường NodeJS mà NodeJS là một hệ sinh thái với hệ thống thư viện mở lớn nhất thế giới. Tuy nhiên, nó không dễ tiếp cận như Python, Ruby. Vì vậy, bạn cần lườm trước mọi thứ trước khi dấn thân vào Javascript. Tuy nhiên, lợi ích của bạn khi biết Javascript đó là có thể lập trình MỌI NỀN TẢNG từ những board mạch nhỏ nhất như (Raspberry Pi, Intel Galileo, Arduino Yún,...) cho đến môi trường Web.

lên
11 thành viên đã đánh giá bài viết này hữu ích.

Cài đặt Raspbian trên Raspberry PI - KHÔNG CẦN MÀN HÌNH và KHÔNG CẦN BIẾT ĐỊA CHỈ IP

Nếu đã chọn theo hướng một nhà phát triển Raspberry Pi, thì tôi nghĩ, bạn buộc phải dùng Raspbian vì hệ điều hành mà nó dựa trên là Debian, mà Debian trong thế giới Linux lại vô cùng lớn và rất nhiều tài liệu phong phú. Còn đối với các hệ điều hành khác thì cũng khá nhiều tài liệu, nhưng các loạt bài viết của mình, mình sẽ hướng dẫn và xem như các bạn đã cài Raspbian. Vì vậy, hãy sử dụng Raspbian cho cậu Raspberry Pi của mình nhé.
Ở bài viết trước về việc cài Raspbian, mình đã trình bày về việc phải biết địa chỉ IP mới cài được Raspbian. Nhưng hôm nay, mình đã tìm ra cách không cần biết địa chỉ IP luôn. Cảm ơn @ksp đã giúp mình một phương pháp hay.

lên
10 thành viên đã đánh giá bài viết này hữu ích.