Mục lục:
- Bước 1: Điều kiện tiên quyết
- Bước 2: Cài đặt phần mềm CribSense
- Bước 3: Chuẩn bị sẵn sàng phần cứng của bạn: Kết nối máy ảnh của bạn
- Bước 4: Chuẩn bị sẵn sàng phần cứng của bạn: IR LED
- Bước 5: Chuẩn bị sẵn sàng phần cứng của bạn: Khung máy
- Bước 6: Chuẩn bị phần cứng của bạn: Lắp ráp
- Bước 7: Hiệu chỉnh
- Bước 8: Trình diễn
- Bước 9: Khắc phục sự cố
Video: CribSense: Màn hình trẻ em dựa trên video, không tiếp xúc: 9 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:34
CribSense là một màn hình trẻ em không tiếp xúc, dựa trên video mà bạn có thể tự chế tạo mà không cần vi phạm ngân hàng
CribSense là một triển khai C ++ của Phóng đại video được điều chỉnh để chạy trên Raspberry Pi 3 Model B. Vào cuối tuần, bạn có thể thiết lập màn hình em bé trên cũi của riêng mình để báo động nếu con bạn ngừng di chuyển. Như một phần thưởng, tất cả phần mềm đều được sử dụng miễn phí cho các mục đích phi thương mại và có thể dễ dàng mở rộng.
Bạn có thể tìm thấy kho lưu trữ đầy đủ chứa các tệp nguồn và tài liệu tại
Mặc dù chúng tôi nghĩ rằng CribSense khá thú vị, nhưng điều quan trọng cần nhớ là đây không thực sự là một thiết bị an toàn được chứng nhận và chống lại sự đánh lừa. Đó là, nó cần được cấu hình đúng cách và có một môi trường được kiểm soát tốt để hoạt động. Ví dụ: nếu nó không được hiệu chỉnh tốt và / hoặc môi trường trong video không có lợi cho việc phóng đại video, bạn có thể không sử dụng được nó. Chúng tôi thực hiện đây là một dự án thú vị để xem chúng tôi có thể có phần mềm tính toán nặng như phóng đại video chạy trên phần cứng giới hạn máy tính như Raspberry Pi tốt như thế nào. Bất kỳ sản phẩm thực nào cũng sẽ yêu cầu nhiều thử nghiệm hơn chúng tôi đã làm. Vì vậy, nếu bạn sử dụng dự án này, hãy sử dụng nó để làm gì: một cuộc khám phá ngắn về độ phóng đại video trên Pi.
Những gì bạn sẽ cần:
Công cụ cấu hình Raspberry Pi + Camera +:
- Raspberry Pi 3 Mô hình B
- Nguồn cấp 5V 2.5A Micro USB
- Mô-đun máy ảnh Raspberry Pi NoIR V2
- Thẻ MicroSD (chúng tôi đã sử dụng Thẻ 16GB Class 10)
- Cáp Flex cho Máy ảnh Raspberry Pi (12 ")
- Loa có đầu vào 3,5mm
- Màn hình HDMI
- Bàn phím USB
- Chuột USB
- [tùy chọn] Tản nhiệt Raspberry Pi (nếu bạn lo lắng về nhiệt, bạn có thể dán một trong những thứ này vào Pi của mình)
Mạch IR LED để hoạt động trong điều kiện ánh sáng yếu:
- [3x] 1N4001 Điốt
- Điện trở 1 Ohm, 1W
- LED hồng ngoại 1W
- 2 dây để nối đèn LED với Pi
- Hàn sắt
Khung:
- Truy cập vào máy in 3D (khối lượng bản dựng tối thiểu = 9,9 "L x 7,8" W x 5,9 "H) để in khung của chúng tôi. Tuy nhiên, hãy tự do chế tạo khung của riêng bạn.
- Keo (bất kỳ loại keo nào cũng được, nhưng nên dùng keo nóng để tạo mẫu).
Bước 1: Điều kiện tiên quyết
Trước khi bắt đầu hướng dẫn từng bước của chúng tôi, bạn nên cài đặt phiên bản Raspbian mới nhất trên thẻ SD của mình và đảm bảo rằng Pi của bạn đang hoạt động. Bạn cũng sẽ cần phải bật mô-đun camera trước khi có thể truy cập vào camera.
Bước 2: Cài đặt phần mềm CribSense
CribSense phụ thuộc vào autoconf, libtool, OpenCV và libcanberra, cũng như các công cụ phần mềm phổ biến.
- autoconf và libtool được sử dụng để tự động định cấu hình tệp trang và xây dựng tập lệnh cho CribSense trên nhiều nền tảng (như Linux, OSX và Raspberry Pi).
- OpenCV là một gói thị giác máy tính mạnh mẽ được sử dụng để xử lý hình ảnh và là cơ sở của mã phóng đại video và mã phát hiện chuyển động. Nó có sự hỗ trợ tuyệt vời, dễ sử dụng và có hiệu suất tốt.
- libcanberra là một thư viện đơn giản để phát âm thanh sự kiện. Nó được sử dụng để phát âm thanh báo động cho CribSense.
Truy cập các trang cá nhân của họ để có được đầy đủ chi tiết.
Cài đặt những thứ này bằng cách mở một thiết bị đầu cuối trên Pi của bạn và chạy:
sudo apt-get install git build-essential autoconf libtool libopencv-dev libcanberra-dev
Tiếp theo, bạn cần đặt trình điều khiển máy ảnh thành tự động tải bằng cách thêm bcm2835-v4l2 vào `/ etc / modules-load.d / modules.conf`. Module.conf của bạn sẽ trông như thế này:
# / etc / modules: các mô-đun hạt nhân để tải vào lúc khởi động.
# # Tệp chứa tên của các mô-đun hạt nhân sẽ được tải # lúc khởi động, mỗi tên một dòng. Các dòng bắt đầu bằng "#" bị bỏ qua. i2c-dev bcm2835-v4l2
Khi tệp đã được chỉnh sửa, bạn phải khởi động lại Pi của mình. Trình điều khiển này được CribSense sử dụng để kéo trực tiếp khung hình từ Camera NoIR.
Sau đó, bạn có thể sao chép kho lưu trữ bằng cách chạy:
git clone
Tiếp theo, chuyển vào kho lưu trữ và xây dựng phần mềm bằng cách chạy
cd CribSense
./autogen.sh --prefix = / usr --sysconfdir = / etc --disable-debug make sudo make install sudo systemctl daemon-reload
Xin chúc mừng, bạn đã cài đặt tất cả các phần mềm cần thiết!
Cấu hình
CribSense có thể tùy chỉnh thông qua một tệp cấu hình INI đơn giản. Sau khi chạy `make install`, tệp cấu hình được đặt tại /etc/cripsense/config.ini. Bạn có thể xem và chỉnh sửa các thông số này bằng cách chạy
sudo nano /etc/cripsense/config.ini
Giải thích ngắn gọn về từng tham số được đưa ra trong cấu hình mặc định, nhưng có thêm thông tin chi tiết tại https://lukehsiao.github.io/CribSense/setup/config/. Chúng tôi cũng sẽ thảo luận về hiệu chuẩn và cấu hình ở cuối hướng dẫn này.
Chạy CribSense
CribSense được thiết kế để chạy khi khởi động bằng cách sử dụng dịch vụ systemd. Trong khi kết nối với Raspberry Pi bằng bàn phím và chuột, bạn nên đảm bảo rằng các thông số cấu hình phù hợp với nôi của bạn. Bạn có thể cần phải điều chỉnh lại các thông số này nếu bạn di chuyển nó.
Trong khi bạn đang điều chỉnh các tham số, bạn có thể chạy cribsense theo ý muốn từ dòng lệnh bằng cách chạy
cribsense --config /etc/cripsense/config.ini
Khi bạn hài lòng, bạn có thể bật tự động chạy bằng cách chạy
sudo systemctl cho phép cribsense
Bạn có thể ngăn cribsense chạy tự động bằng cách chạy
sudo systemctl vô hiệu hóa cribsense
Tổng quan về phần mềm
Phần mềm CribSense là trái tim và linh hồn của dự án này. Chúng tôi đã xem một số bản demo tuyệt vời về độ phóng đại video từ MIT và muốn thử chạy một thuật toán tương tự trên Raspberry Pi. Điều này yêu cầu tốc độ tăng hơn 10 lần so với công việc của tbl3rd trong việc triển khai C ++ của anh ấy về tính năng phóng đại video để chạy trong thời gian thực trên Pi. Các tối ưu hóa cần thiết đã hướng dẫn thiết kế phần mềm của chúng tôi.
Ở cấp độ cao, CribSense lặp lại chu kỳ qua một máy trạng thái phần mềm. Đầu tiên, nó chia mỗi khung hình video 640x480, thang độ xám thành 3 phần ngang (640x160) để định vị bộ nhớ cache tốt hơn. Sau đó, nó phóng đại từng dải trong một chuỗi riêng biệt và theo dõi chuyển động được nhìn thấy trong khung. Sau khi theo dõi chuyển động trong vài giây, nó xác định khu vực chính của chuyển động và cắt khung hình cho nó. Điều này làm giảm tổng số pixel mà thuật toán cần xử lý. Sau đó, CribSense giám sát lượng chuyển động trong luồng đã cắt và phát âm thanh cảnh báo nếu không có chuyển động nào được nhận thấy trong một khoảng thời gian có thể định cấu hình. Định kỳ, CribSense sẽ mở lại chế độ xem của nó để theo dõi toàn bộ khung hình trong trường hợp trẻ sơ sinh đã di chuyển và cắt xén lại xung quanh vùng chuyển động chính mới.
Tính năng phóng đại video được sử dụng để tăng tỷ lệ tín hiệu trên nhiễu của các chuyển động nhỏ như thở của trẻ sơ sinh. Nó sẽ không cần thiết cho các chuyển động lớn hơn, nhưng có thể giúp cho các chuyển động rất tinh tế. Lưu ý rằng việc triển khai của chúng tôi dựa trên thuật toán được mô tả trong các bài báo của MIT một cách lỏng lẻo và không hoạt động tốt như mã độc quyền của chúng.
Các tối ưu hóa như đa luồng, cắt xén thích ứng và tối ưu hóa trình biên dịch đã mang lại cho chúng tôi tốc độ tăng tương ứng là 3 lần, 3 lần và 1,2 lần. Điều này cho phép chúng tôi đạt được tốc độ gấp 10 lần cần thiết để chạy thời gian thực trên Pi.
Chi tiết đầy đủ có thể được tìm thấy trên trang Kiến trúc phần mềm của kho lưu trữ CribSense.
Nếu bạn quan tâm đến độ phóng đại video, vui lòng truy cập trang của MIT.
Bước 3: Chuẩn bị sẵn sàng phần cứng của bạn: Kết nối máy ảnh của bạn
Đầu tiên, bạn hoán đổi cáp 6 "đi kèm với máy ảnh với cáp 12". Để làm điều này, bạn chỉ cần làm theo hướng dẫn này về cách thay thế cáp camera.
Tóm lại, bạn sẽ thấy một tab đẩy / kéo ở mặt sau của máy ảnh mà bạn có thể kéo ra để nhả cáp flex. Thay thế cáp ngắn bằng cáp dài hơn và đẩy tab vào lại.
Bạn sẽ nhận thấy rằng chúng tôi có một sợi cáp 24 "trong hình. Nó quá dài. Cáp 12" trong danh sách vật liệu là một độ dài hợp lý hơn nhiều.
Bước 4: Chuẩn bị sẵn sàng phần cứng của bạn: IR LED
CribSense tương đối dễ xây dựng và phần lớn được tạo thành từ các bộ phận có sẵn trên thị trường. Như đã thấy trong hình trên, có 5 thành phần phần cứng chính, chỉ có 2 trong số đó là tùy chỉnh. Trang này sẽ hướng dẫn cách cấu tạo mạch IR LED và trang tiếp theo sẽ hướng dẫn cách cấu tạo khung máy.
Đối với phần này, bạn cần lấy mỏ hàn, dây điện, điốt, đèn LED hồng ngoại và điện trở. Chúng ta sẽ xây dựng mạch điện trong hình 2. Nếu bạn chưa quen với hàn, đây là một hướng dẫn hay sẽ giúp bạn nắm bắt được. Trong khi hướng dẫn này thảo luận về hàn xuyên lỗ, bạn có thể sử dụng các kỹ thuật cơ bản tương tự để kết nối các thành phần này với nhau như thể hiện trong hình thứ 3.
Để cung cấp đủ ánh sáng vào ban đêm, chúng tôi sử dụng đèn LED hồng ngoại, không thể nhìn thấy bằng mắt người nhưng có thể nhìn thấy đối với camera NoIR. IR LED không tiêu thụ nhiều điện năng so với Raspberry Pi, vì vậy chúng tôi để IR LED được bật vì đơn giản.
Trong các phiên bản trước của Pi, đầu ra dòng điện tối đa của các chân này là 50mA. Raspberry Pi B + đã tăng mức này lên 500mA. Tuy nhiên, chúng ta chỉ sử dụng chân nguồn 5V cho đơn giản, có thể cấp nguồn lên đến 1.5A. Điện áp phía trước của đèn LED hồng ngoại là khoảng 1,7 ~ 1,9V theo các phép đo của chúng tôi. Mặc dù đèn LED hồng ngoại có thể hút 500mA mà không làm hỏng chính nó, chúng tôi giảm dòng điện xuống khoảng 200mA để giảm nhiệt và tiêu thụ điện năng tổng thể. Kết quả thử nghiệm cũng cho thấy IR LED đủ sáng với dòng điện đầu vào 200mA. Để thu hẹp khoảng cách giữa 5V và 1,9V, chúng tôi sử dụng ba điốt 1N4001 và điện trở 1 Ohm mắc nối tiếp với đèn LED hồng ngoại. Điện áp rơi trên dây dẫn, điốt và điện trở lần lượt là khoảng 0,2V, 0,9V (cho mỗi cái) và 0,2V. Do đó, điện áp trên IR LED là 5V - 0,2V - (3 * 0,9V) - 0,2V = 1,9V. Tản nhiệt trên đèn LED là 0,18W và 0,2W trên điện trở, tất cả đều nằm trong mức xếp hạng tối đa của chúng.
Nhưng chúng tôi vẫn chưa xong! Để phù hợp hơn với khung máy in 3D, chúng tôi muốn có ống kính IR LED nhô ra khỏi khung máy của chúng tôi và có bo mạch PCB bằng phẳng với lỗ. Điốt quang nhỏ ở dưới cùng bên phải sẽ cản đường. Để khắc phục điều này, chúng tôi làm khô nó và lật nó sang phía đối diện của bảng như trong hai bức ảnh cuối cùng. Điốt quang là không cần thiết vì chúng tôi muốn đèn LED luôn sáng. Chỉ cần chuyển nó sang phía đối diện sẽ khiến mạch LED ban đầu không thay đổi.
Khi hàn vào dây, hãy đảm bảo rằng dây dài ít nhất 12 inch và có đầu ghim có thể trượt qua GPIO của Pi.
Bước 5: Chuẩn bị sẵn sàng phần cứng của bạn: Khung máy
Tệp nguồn:
- Trường hợp STL
- Case Makerbot
- Che STL
- Cover Makerbot
Chúng tôi đã sử dụng một khung in 3D đơn giản để làm nơi chứa Pi, máy ảnh và đèn LED. Việc sử dụng khung của chúng tôi là tùy chọn, mặc dù được khuyến nghị để ngăn trẻ nhỏ chạm vào mạch điện tử tiếp xúc. Mỗi cũi đều khác nhau, vì vậy khung của chúng tôi không bao gồm giá đỡ. Một số tùy chọn lắp có thể bao gồm:
- Ties cáp
- Khóa kép 3M
- khóa dán
- Băng
Nếu bạn có quyền truy cập vào Trình tái tạo MakerBot (Thế hệ thứ 5), bạn có thể chỉ cần tải xuống các tệp.makerbot cho trường hợp và phủ lên Trình tái tạo MakerBot của bạn và in. Mất khoảng 6 giờ để in vỏ và 3 giờ để in bìa. Nếu bạn đang sử dụng một loại máy in 3D khác, vui lòng tiếp tục đọc.
Yêu cầu khối lượng bản dựng tối thiểu là 9,9 "(L) x 7,8" (Rộng) x 5,9 "(H) để in CribSense. Nếu bạn không có quyền truy cập vào máy in 3D có dung lượng bản dựng này, bạn có thể sử dụng tính năng in 3D trực tuyến (chẳng hạn như Shapeways hoặc Sculpteo) để in CribSense. Độ phân giải in tối thiểu là 0,015 ". Nếu bạn đang sử dụng máy in 3D loại chế tạo dây tóc hợp nhất, điều này có nghĩa là đường kính đầu phun của bạn phải từ 0,015 "trở xuống. Máy in có độ phân giải in thấp hơn (đường kính đầu phun lớn hơn) có thể hoạt động, nhưng Raspberry Pi có thể không vừa với khung máy. Chúng tôi đề xuất PLA (axit polylactic) làm vật liệu in ưa thích. Các loại nhựa khác có thể hoạt động, nhưng Raspberry Pi có thể không phù hợp trong trường hợp này nếu hệ số giãn nở nhiệt của nhựa được chọn lớn hơn PLA. Nếu máy in 3D của bạn có làm nóng tấm xây dựng, tắt lò sưởi trước khi tiếp tục.
Định hướng kiểu máy trên tấm bản dựng của máy in là rất quan trọng để in thành công. Các mô hình này được thiết kế cẩn thận nên không cần in bằng vật liệu hỗ trợ, do đó tiết kiệm nhựa và cải thiện chất lượng in. Trước khi tiếp tục, hãy tải xuống các tệp 3D cho vỏ và nắp. Khi in các mô hình này, cổ của CribSense phải nằm phẳng trên tấm xây dựng. Điều này đảm bảo rằng tất cả các góc nhô ra trên mô hình không vượt quá 45 độ, do đó loại bỏ yêu cầu về vật liệu hỗ trợ. Để biết hướng dẫn về định hướng mô hình 3D trong khối lượng xây dựng của máy in của bạn, vui lòng tham khảo hướng dẫn sử dụng đi kèm với máy in 3D của bạn. Ví dụ về hướng xây dựng của vỏ và nắp được hiển thị ở trên.
Ngoài việc đặt cổ của CribSense phẳng trên tấm dựng, bạn có thể nhận thấy rằng các mô hình được xoay quanh trục thẳng đứng. Điều này có thể cần thiết để phù hợp với mô hình bên trong khối lượng xây dựng của máy in 3D của bạn. Vòng xoay này là tùy chọn nếu độ dài của khối lượng bản dựng của bạn đủ dài để chứa CribSense.
Bước 6: Chuẩn bị phần cứng của bạn: Lắp ráp
Khi bạn đã có sẵn tất cả phần cứng, bạn có thể bắt đầu lắp ráp. Bất kỳ loại keo nào cũng có thể được sử dụng trong quá trình này, nhưng chúng tôi khuyên bạn nên sử dụng keo nóng vì hai lý do chính. Keo nóng khô nhanh nên bạn không cần đợi lâu để keo khô. Ngoài ra, keo nóng có thể tháo rời nếu bạn làm sai. Để loại bỏ keo nóng đã khô, hãy ngâm keo nóng vào cồn tẩy rửa (isopropyl). Chúng tôi khuyên bạn nên tập trung 90% hoặc cao hơn, nhưng nồng độ 70% vẫn sẽ hoạt động. Ngâm keo nóng đã khô trong cồn isopropyl sẽ làm yếu liên kết giữa keo và bề mặt bên dưới, cho phép bạn bóc keo ra một cách sạch sẽ. Khi ngâm keo trong cồn isopropyl, Raspberry Pi nên được tắt nguồn và rút phích cắm. Đảm bảo để mọi thứ khô trước khi bôi lại keo nóng và khởi động Raspberry Pi.
Tất cả các hình ảnh cho các bước này theo thứ tự và tuân theo các bước văn bản.
- Lắp Raspberry Pi vào khung. Bạn sẽ cần phải uốn cong nó một chút để đưa cổng âm thanh vào, nhưng khi đã vào, giắc cắm âm thanh sẽ giữ nguyên vị trí của nó. Khi nó ở đúng vị trí, hãy đảm bảo rằng tất cả các cổng vẫn có thể được truy cập (ví dụ: bạn có thể cắm cáp nguồn).
- Tiếp theo, dùng keo nóng để gắn Pi vào đúng vị trí và gắn camera vào Pi. Có các lỗ bắt vít nếu bạn thích sử dụng chúng.
- Bây giờ, dán đèn LED và camera vào nắp trước (hình). Bắt đầu bằng cách dán nóng camera NoIR vào lỗ camera. Đảm bảo rằng máy ảnh vừa khít và thẳng hàng với khung máy. Không sử dụng quá nhiều keo; nếu không, bạn sẽ không thể lắp máy ảnh vào hộp đựng chính. Đảm bảo bật nguồn Pi và nhìn vào máy ảnh (ví dụ: `raspistill -v`) để đảm bảo rằng nó được đặt góc và có trường nhìn tốt. Nếu không, hãy loại bỏ keo nóng và đặt lại vị trí của nó.
- Tiếp theo, dán đèn LED hồng ngoại vào lỗ trên cổ của tấm bìa. Cổ nằm nghiêng 45 độ so với đèn chiếu sáng của nôi, dẫn đến nhiều bóng hơn trong các tình huống thiếu sáng. Điều này tạo thêm độ tương phản cho hình ảnh, giúp dễ dàng phát hiện chuyển động hơn.
- Gắn các dây IR LED vào các chân tiêu đề của Raspberry Pi như thể hiện trong hình sơ đồ.
- Đóng gói cáp vào khung sao cho không làm nhàu hoặc căng chúng. Chúng tôi đã kết thúc việc gấp kiểu cáp accordion vì cáp flex của máy ảnh của chúng tôi quá dài.
- Với tất cả mọi thứ đã được cố định, keo nóng xung quanh các cạnh nơi hai mảnh gặp nhau, dán chúng vào vị trí.
Bước 7: Hiệu chỉnh
Thông tin chi tiết về các thông số cấu hình có thể được tìm thấy trong tài liệu của kho lưu trữ CribSense. Ngoài ra, hãy xem video để xem ví dụ về cách bạn có thể hiệu chỉnh CribSense sau khi bạn đã thiết lập xong mọi thứ.
Đây là một mẫu tệp cấu hình:
[io]; Cấu hình I / O
; input = path_to_file; Tập tin đầu vào để sử dụng input_fps = 15; fps đầu vào (tối đa 40, khuyến nghị 15 nếu sử dụng máy ảnh) full_fps = 4,5; fps mà tại đó toàn bộ khung hình có thể được xử lý crop_fps = 15; fps mà tại đó máy ảnh có thể xử lý khung cắt xén = 0; Máy ảnh để sử dụng chiều rộng = 640; Chiều rộng của chiều cao video đầu vào = 480; Chiều cao của video đầu vào time_to_alarm = 10; Chờ bao nhiêu giây mà không có chuyển động trước khi báo thức. [cắt xén]; Cài đặt cắt xén thích ứng xén = true; Có cắt bớt frame_to_settle = 10 hay không; # khung phải đợi sau khi đặt lại trước khi xử lý roi_update_interval = 800; # khung giữa ROI đang tính toán lại roi_window = 50; # khung để theo dõi trước khi chọn ROI [chuyển động]; Cài đặt phát hiện chuyển động erode_dim = 4; kích thước của hạt nhân xói mòn dilate_dim = 60; kích thước của hạt nhân giãn ra diff_threshold = 8; chênh lệch abs cần thiết trước khi nhận ra thời gian thay đổi = 1; # khung để duy trì chuyển động trước khi gắn cờ true pixel_threshold = 5; # pixel phải khác để gắn cờ là motion show_diff = false; hiển thị sự khác biệt giữa 3 khung hình [độ phóng đại]; Cài đặt phóng đại video khuếch đại = 25; % Khuếch đại mong muốn ở ngưỡng thấp = 0,5; Tần số thấp của dải thông. điểm cắt cao = 1,0; Tần số cao của dải thông. ngưỡng = 50; Ngưỡng pha theo% của số pi. show_magnification = false; Hiển thị khung đầu ra của mỗi độ phóng đại [debug] print_times = false; In thời gian phân tích
Việc hiệu chỉnh thuật toán là một nỗ lực lặp đi lặp lại, không có giải pháp chính xác. Chúng tôi khuyến khích bạn thử nghiệm với nhiều giá trị khác nhau, kết hợp chúng với các tính năng gỡ lỗi, để tìm ra sự kết hợp của các tham số phù hợp nhất với môi trường của bạn. Trước khi bạn bắt đầu hiệu chỉnh, hãy đảm bảo rằng show_diff và show_magnification được đặt thành true.
Theo hướng dẫn, việc tăng độ khuếch đại và các giá trị phase_threshold sẽ tăng mức độ phóng đại được áp dụng cho video đầu vào. Bạn nên thay đổi các giá trị này cho đến khi thấy rõ chuyển động mà bạn muốn theo dõi trong khung hình video. Nếu bạn thấy hiện tượng giả tạo, việc giảm phase_threshold trong khi vẫn giữ nguyên mức khuếch đại có thể hữu ích.
Các thông số phát hiện chuyển động giúp bù nhiễu. Khi phát hiện các vùng chuyển động, erode_dim và dilate_dim được sử dụng để xác định kích thước của các hạt nhân OpenCV được sử dụng để làm xói mòn và làm giãn chuyển động để tiếng ồn lần đầu tiên bị loại bỏ, sau đó tín hiệu chuyển động còn lại sẽ bị giãn ra đáng kể để làm cho các vùng chuyển động trở nên rõ ràng. Các thông số này cũng có thể cần được điều chỉnh nếu cũi của bạn ở cài đặt có độ tương phản rất cao. Nói chung, bạn sẽ cần erode_dim cao hơn để cài đặt độ tương phản cao và erode_dim thấp hơn cho độ tương phản thấp.
Nếu bạn chạy CribSense với show_diff = true và bạn nhận thấy rằng quá nhiều đầu ra của bộ tích lũy có màu trắng hoặc một số phần hoàn toàn không liên quan của video được phát hiện là chuyển động (ví dụ: đèn nhấp nháy), hãy tăng erode_dim cho đến khi chỉ một phần của video tương ứng với em bé của bạn là phần lớn nhất của màu trắng. Hình đầu tiên cho thấy một ví dụ trong đó kích thước xói mòn quá thấp so với lượng chuyển động trong khung, trong khi hình tiếp theo cho thấy một khung được hiệu chỉnh tốt.
Khi điều này đã được hiệu chỉnh, hãy đảm bảo rằng pixel_threshold được đặt thành một giá trị sao cho "Pixel Movement" chỉ báo cáo các giá trị cao nhất của chuyển động pixel chứ không phải tất cả chúng (có nghĩa là bạn cần loại bỏ nhiễu). Lý tưởng nhất là bạn sẽ thấy đầu ra như thế này trong thiết bị đầu cuối của mình, nơi có một mẫu tuần hoàn rõ ràng tương ứng với chuyển động:
[thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 1.219812 Hz
[thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 1.219812 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 1.219812 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 1.219812 Hz [thông tin] Chuyển động pixel: 44 [thông tin] Ước tính chuyển động: 1.219812 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 1.219812 Hz [thông tin] Chuyển động pixel: 161 [thông tin] Ước tính chuyển động: 1.219812 Hz [thông tin] Chuyển động pixel: 121 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Ước tính chuyển động: 86 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Di chuyển pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Pixel Movem ent: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Ước tính chuyển động: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 97 [thông tin] Ước tính chuyển động: 0,841416 Hz [thông tin] Chuyển động pixel: 74 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Pixel Chuyển động: 0 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 60 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 48 [thông tin] Chuyển động Ước tính: 0,839298 Hz [thông tin] Chuyển động pixel: 38 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 29 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 28 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 22 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,839298 Hz [thông tin] Chuyển động pixel: 0 [thông tin] Ước tính chuyển động: 0,839298 Hz
Nếu đầu ra của bạn trông giống như thế này:
[thông tin] Chuyển động pixel: 921 [thông tin] Ước tính chuyển động: 1.352046 Hz
[thông tin] Chuyển động pixel: 736 [thông tin] Ước tính chuyển động: 1.352046 Hz [thông tin] Chuyển động pixel: 666 [thông tin] Ước tính chuyển động: 1.352046 Hz [thông tin] Chuyển động pixel: 663 [thông tin] Ước tính chuyển động: 1.352046 Hz [thông tin] Chuyển động pixel: 1196 [thông tin] Ước tính chuyển động: 1.352046 Hz [thông tin] Chuyển động pixel: 1235 [thông tin] Ước tính chuyển động: 1.352046 Hz [thông tin] Chuyển động pixel: 1187 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 1115 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 959 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Ước tính chuyển động: 744 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 611 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 468 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 371 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 307 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 270 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 234 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 197 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 179 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 164 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 239 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 733 [thông tin] Ước tính chuyển động: 1.456389 Hz [thông tin] Chuyển động pixel: 686 [thông tin] Ước tính chuyển động: 1.229389 Hz [thông tin] Chuyển động pixel: 667 [thông tin] Ước tính chuyển động: 1.229389 Hz [thông tin] Chuyển động pixel: 607 [info] Ước tính chuyển động: 1.229389 Hz [thông tin] Chuyển động pixel: 544 [thông tin] Ước tính chuyển động: 1.229389 Hz [thông tin] Chuyển động pixel: 499 [thông tin] Ước tính chuyển động: 1.229389 Hz [thông tin] Chuyển động pixel: 434 [thông tin] Ước tính chuyển động: 1.229389 Hz [thông tin] Chuyển động pixel: 396 [thông tin] Ước tính chuyển động: 1.229389 Hz [thông tin] Chuyển động pixel: 375 [thông tin] Ước tính chuyển động: 1.229389 Hz [thông tin] Chuyển động pixel: 389 [thông tin] Ước tính chuyển động: 1.229389 Hz [thông tin] Chuyển động pixel: 305 [thông tin] Ước tính chuyển động: 1.312346 Hz [thông tin] Chuyển động pixel: 269 [thông tin] Ước tính chuyển động: 1.312346 Hz [thông tin] Chuyển động pixel: 1382 [thông tin] Chuyển động E kích thích: 1.312346 Hz [thông tin] Chuyển động pixel: 1086 [thông tin] Ước tính chuyển động: 1.312346 Hz [thông tin] Chuyển động pixel: 1049 [thông tin] Ước tính chuyển động: 1.312346 Hz [thông tin] Chuyển động pixel: 811 [thông tin] Ước tính chuyển động: 1.312346 Hz [thông tin] Chuyển động pixel: 601 [thông tin] Ước tính chuyển động: 1,312346 Hz [thông tin] Chuyển động pixel: 456 [thông tin] Ước tính chuyển động: 1,312346 Hz
Điều chỉnh pixel_threshold và diff_threshold cho đến khi chỉ nhìn thấy các đỉnh và chuyển động pixel bằng 0 nếu không.
Bước 8: Trình diễn
Đây là một bản demo nhỏ về cách hoạt động của CribSense. Bạn sẽ phải tưởng tượng rằng cái này được gắn vào thành cũi.
Khi bạn đặt CribSense trên cũi của mình, bạn sẽ cần tối ưu hóa khoảng cách giữa trẻ sơ sinh và máy ảnh. Lý tưởng nhất là ngực của trẻ sơ sinh sẽ lấp đầy dưới 1/3 khung hình. Không nên để đứa trẻ ở quá xa, nếu không video có độ phân giải thấp sẽ khó tìm đủ chi tiết để phóng đại. Nếu máy ảnh quá gần, máy ảnh có thể không nhìn thấy con bạn nếu chúng lăn hoặc di chuyển ra khỏi khung hình. Tương tự, nếu trẻ nằm dưới một chiếc chăn "lều", nơi có sự tiếp xúc hạn chế giữa chăn và ngực của trẻ, có thể khó phát hiện chuyển động. Chốt chúng thật tốt!
Bạn cũng sẽ muốn xem xét tình hình ánh sáng xung quanh cũi của mình. Nếu cũi của bạn ngay cạnh cửa sổ, bạn có thể nhận được bóng chuyển động hoặc thay đổi giá trị ánh sáng do mặt trời bị mây cản hoặc chuyển động xảy ra bên ngoài cửa sổ. Nơi nào có ánh sáng phù hợp là tốt nhất.
Với một số công việc nữa, chúng tôi nghĩ rằng ai đó có thể cải thiện phần mềm của chúng tôi để quá trình hiệu chuẩn diễn ra suôn sẻ hơn nhiều. Trong tương lai, các tính năng bổ sung như thông báo đẩy cũng có thể được thêm vào.
Bước 9: Khắc phục sự cố
Bạn có thể gặp phải một số sự cố phổ biến khi thiết lập CribSense. Ví dụ: gặp sự cố khi xây dựng / chạy chương trình hoặc không nghe thấy bất kỳ âm thanh nào. Hãy nhớ rằng, CribSense không phải là một thiết bị theo dõi em bé hoàn toàn đáng tin cậy. Chúng tôi hoan nghênh các đóng góp trên kho lưu trữ GitHub của chúng tôi khi bạn thực hiện các cải tiến!
Dưới đây là một số mẹo khắc phục sự cố mà chúng tôi đã thu thập được khi tạo CribSense.
Không có báo thức nào đang phát
- Loa của bạn có hoạt động không?
- Bạn có thể phát các âm thanh khác từ Pi bên ngoài báo thức CribSense không?
- Nếu Pi của bạn đang cố gắng phát âm thanh qua HDMI thay vì cổng âm thanh? Kiểm tra trang Cấu hình âm thanh Raspberry Pi để đảm bảo rằng bạn đã chọn đúng đầu ra.
- Phần mềm CribSense có phát hiện chuyển động không? Nếu CribSense đang chạy ở chế độ nền, bạn có thể kiểm tra bằng journalctl -f trong một thiết bị đầu cuối.
- Nếu CribSense cảm nhận được nhiều chuyển động, bạn có thể cần phải hiệu chỉnh CribSense.
Đèn LED hồng ngoại không hoạt động
- Bạn có thể thấy màu đỏ mờ khi nhìn vào đèn LED hồng ngoại không? Một vòng màu đỏ mờ sẽ hiển thị khi đèn LED bật.
- Kiểm tra cực tính của các kết nối. Nếu đảo ngược + 5V và GND, nó sẽ không hoạt động.
- Kết nối đèn LED với nguồn điện có giới hạn điện áp / dòng điện 5V / 0,5A. Thông thường, nó sẽ tiêu thụ 0,2A ở 5V. Nếu không, đèn LED của bạn có thể bị trục trặc.
CribSense đang phát hiện chuyển động mặc dù không có trẻ sơ sinh
- Bạn đã hiệu chỉnh CribSense đúng cách chưa?
-
Hãy nhớ rằng, CribSense chỉ đang tìm kiếm những thay đổi trong giá trị pixel
- Có bóng nào di chuyển trong khung hình không?
- Có nhấp nháy hoặc thay đổi ánh sáng không?
- CribSense có được gắn vào một bề mặt ổn định (tức là thứ không bị rung lắc nếu mọi người đi ngang qua nó) không?
- Có nguồn chuyển động nào khác trong khung (gương bắt phản xạ, v.v.) không?
CribSense KHÔNG phát hiện chuyển động ngay cả khi có chuyển động
- Bạn đã hiệu chỉnh CribSense đúng cách chưa?
- Có gì trong cách của máy ảnh?
- Bạn có thể kết nối với máy ảnh từ Raspberry Pi không? Kiểm tra bằng cách chạy raspistill -v trong một thiết bị đầu cuối để mở camera trên Pi trong vài giây.
- Nếu bạn nhìn vào trạng thái sudo systemctl cribsense, thì CribSense có thực sự đang chạy không?
- Có phải trẻ sơ sinh của bạn nằm dưới một tấm chăn được "dựng" lên để nó không tiếp xúc với trẻ? Nếu có khoảng trống không khí đáng kể giữa chăn và trẻ, chăn có thể che khuất chuyển động của trẻ.
- Bạn có thể nhìn thấy chuyển động nếu bạn khuếch đại video nhiều hơn không?
- Bạn có thể nhìn thấy chuyển động nếu bạn điều chỉnh mức cắt tần số thấp và cao không?
- Nếu điều này chỉ xảy ra trong điều kiện ánh sáng yếu, bạn có đảm bảo hiệu chuẩn của mình hoạt động trong điều kiện ánh sáng yếu không?
CribSense không xây dựng
Bạn đã cài đặt tất cả các phụ thuộc?
Tôi không thể chạy cribsense từ dòng lệnh
- Bạn có vô tình gõ nhầm bất cứ thứ gì khi chạy./autogen.sh --prefix = / usr --sysconfdir = / etc --disable-debug trong quá trình xây dựng phần mềm của bạn không?
- Có cribsense trong / usr / bin không?
- Đường dẫn nào được cung cấp nếu bạn chạy "cribsense"?
Đề xuất:
Chuyển động dựa trên ánh sáng RGB của Palms không tiếp xúc: 4 bước
Chuyển động dựa trên ánh sáng RGB của Palms Không tiếp xúc: Đèn ngủ RGB, với khả năng điều khiển màu sắc của đèn ngủ bằng chuyển động của tay. Sử dụng ba cảm biến khoảng cách, chúng tôi sẽ thay đổi độ sáng của từng thành phần trong ba thành phần của màu RGB khi đến gần hoặc bỏ tay ra. An Ar
Tự làm Bộ phân phối nước rửa tay không tiếp xúc mà không cần Arduino hoặc vi điều khiển: 17 bước (có hình ảnh)
DIY Máy rửa tay không tiếp xúc Không cần Arduino hoặc Vi điều khiển: Như chúng ta đã biết, sự bùng phát COVID-19 đã tấn công thế giới và thay đổi lối sống của chúng ta. Trong điều kiện này, Rượu và nước rửa tay là những chất lỏng quan trọng, tuy nhiên, chúng phải được sử dụng đúng cách. Chạm vào hộp đựng cồn hoặc nước rửa tay bằng tay bị nhiễm trùng c
Xúc xắc điện tử - Arduino Die / xúc xắc 1 đến 6 Xúc xắc + D4, D5, D8, D10, D12, D20, D24 và D30: 6 bước (có Hình ảnh)
Xúc xắc điện tử - Arduino Die / xúc xắc 1 đến 6 Xúc xắc + D4, D5, D8, D10, D12, D20, D24 và D30: Đây là một dự án arduino đơn giản để tạo ra một con xúc xắc điện tử. Có thể chọn cho 1 đến 6 viên xúc xắc hoặc 1 trong 8 viên xúc xắc đặc biệt. Lựa chọn được thực hiện đơn giản bằng cách xoay một bộ mã hóa quay. Đây là các tính năng: 1 xúc xắc: hiển thị các chấm lớn 2-6 xúc xắc: hiển thị các chấm
Chạy mà không cần màn hình / hiển thị (không có đầu) trên Raspberry Pi hoặc các máy tính dựa trên Linux / unix khác: 6 bước
Chạy Không có Màn hình / Hiển thị (không đầu) trên Raspberry Pi hoặc Máy tính dựa trên Linux / unix khác: Khi hầu hết mọi người mua Raspberry PI, họ nghĩ rằng họ cần một màn hình máy tính. Đừng lãng phí tiền của bạn vào màn hình và bàn phím máy tính không cần thiết. Đừng lãng phí thời gian của bạn khi di chuyển bàn phím và màn hình giữa các máy tính. Đừng buộc TV khi không có
Nhiệt kế hồng ngoại không tiếp xúc dựa trên Arduino - Nhiệt kế dựa trên IR sử dụng Arduino: 4 bước
Nhiệt kế hồng ngoại không tiếp xúc dựa trên Arduino | Nhiệt kế dựa trên IR sử dụng Arduino: Xin chào các bạn trong phần hướng dẫn này, chúng tôi sẽ tạo một Nhiệt kế không tiếp xúc bằng arduino. nhiệt độ sau đó trong phạm vi đó