Mục lục:
- Bước 1: Yêu cầu
- Bước 2: Đào tạo dữ liệu
- Bước 3: Thực hiện dự đoán máy ảnh Pi
- Bước 4: Robot Arduino
- Bước 5: Kiểm tra
- Bước 6: Tất cả các tệp bổ sung
Video: Robot nhận dạng biển báo giao thông Raspberry Pi 4: 6 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
Hướng dẫn này dựa trên dự án đại học của tôi. Mục đích là tạo ra một hệ thống trong đó mạng nơ-ron phân tích một hình ảnh và sau đó dựa trên sự nhận dạng sẽ ra lệnh cho một robot arduino di chuyển qua Ros.
Ví dụ: nếu nhận ra biển báo rẽ phải thì rô bốt sẽ rẽ phải, nếu nhận biết biển báo rẽ trái thì rô bốt sẽ rẽ trái, nếu không nhận dạng được thì rô bốt sẽ tiếp tục đi về phía trước. Tập dữ liệu sẽ được sử dụng là nhận dạng biển báo giao thông chính thức từ INI (2019) (Institut Fur Neuroinformatik), tập dữ liệu này có 43 lớp tuy nhiên chỉ cần hai lớp; Các thư mục 00033 và 00034 trong tập dữ liệu là các biển báo rẽ trái và rẽ phải.
Bước 1: Yêu cầu
Các yêu cầu đối với dự án này là:
Một robot arduino. (về cơ bản là arduino una, trình điều khiển động cơ và động cơ) (không cần thiết nếu bạn không sử dụng rô bốt)
Một số pi 4 quả mâm xôi.
Một máy ảnh pi.
Phần mềm yêu cầu:
Python 3.
OpenCV 4.
Dòng chảy căng.
arduino IDE (không cần thiết nếu bạn không sử dụng rô bốt)
Ros (không cần thiết nếu bạn không sử dụng rô bốt)
Dù lý tưởng python yêu thích của bạn là gì (Trên pi mâm xôi, tôi sử dụng Thonny).
Để thiết lập OpenCV và Tensorflow, hãy làm theo hướng dẫn của Adrian. Liên kết:
Tôi khuyên bạn nên xem càng nhiều hướng dẫn của anh ấy càng tốt, chúng thực sự thú vị và hữu ích cho người mới bắt đầu cũng như người trung gian.
Bước 2: Đào tạo dữ liệu
Tập lệnh tàu được thiết kế để truy cập tập dữ liệu bao gồm khoảng 50, 000 hình ảnh từ 43 lớp. Tập lệnh được viết bằng python, sử dụng nhiều thư viện: os - đây là để liên kết tập lệnh python với đúng thư mục chứa tập dữ liệu. Matplotlib - đây là để hiển thị dữ liệu từ mô hình đào tạo. Tensorflow và keras - đây là những thư viện được sử dụng để tạo mô hình mạng nơron nhân tạo, chúng được sử dụng để thiết kế mô hình. Numpy - thư viện này dùng để chuyển hình ảnh thành một mảng sau đó có thể được đưa vào mô hình để lấy ra một dự đoán.
Tập lệnh đính kèm là mã python để tạo mô hình từ tập dữ liệu. Điều này bao gồm trên 2D tích chập với đầu vào (5, 5) và kích hoạt relu sau đó gộp lại, khi điều này được thực hiện, đầu vào sẽ chuyển qua một tích chập khác với đầu vào (3, 3) với cùng một kích hoạt và tổng hợp. Điều này xảy ra lần cuối trước khi được làm phẳng và sau đó mật độ được áp dụng cho số lượng các lớp ở đó, trong trường hợp này là 43.
Bước tiếp theo là biên dịch mô hình. Đây là phần thiết lập bộ tối ưu, một sgd là phù hợp nhất vì nó tương tự như bộ tối ưu được sử dụng trong bài tập 1. Sgd là viết tắt của Stochastic gradient descent. Ngoài ra trong trình biên dịch, tổn thất cần được đặt, việc chọn tổn thất precision_categorical_crossentropy là cách phù hợp nhất vì các danh mục ở dạng số nguyên và mô hình sẽ xuất ra dự đoán cho mỗi lớp dưới dạng phao từ 0 đến 1. 1 là độ chính xác 100%.
Khi trình biên dịch hoàn tất, một trình tạo cần được áp dụng cho mô hình để bắt đầu xử lý đầu vào hình ảnh. Trình tạo bao gồm nhiều phần: training_set - đây là liên kết đến tập dữ liệu được sử dụng để đào tạo, steps_per_epoch - đây là số bước trên mỗi kỷ nguyên được yêu cầu, kỷ nguyên - đây là số lần chương trình sẽ lặp lại qua một bộ dữ liệu đầy đủ, validation_data - đây là liên kết đến tập dữ liệu được sử dụng để xác thực, validation_steps - số bước được sử dụng để xác nhận, xác nhận xảy ra ở cuối mỗi kỷ nguyên.
Nói chung, quá trình xóa hoàn toàn toàn bộ tập dữ liệu cần phải hoàn tất theo từng kỷ nguyên. Do đó, ví dụ, một tập dữ liệu gồm 1024 hình ảnh sẽ yêu cầu: Kích thước lô = 32, Số bước trên mỗi kỷ nguyên = 32, kỷ nguyên = 1. Mỗi bước bao gồm toàn bộ kích thước lô, vì vậy với kích thước lô là 32, các bước sẽ là 32. Mặt khác tay, tốt nhất nên có kích thước lô lớn hơn số lớp, điều này là do nếu kích thước lô nhỏ hơn thì mỗi bước không thể bao gồm một hình ảnh từ mỗi lớp.
Khi mô hình đã kết thúc quá trình huấn luyện, sử dụng matplotlib, chương trình sẽ tạo một biểu đồ của các kết quả đầu ra, điều này cho thấy lịch sử của quá trình huấn luyện từ đầu đến cuối. Biểu đồ bao gồm độ chính xác, độ chính xác của xác nhận, mất mát và mất xác thực, điều này được chia nhỏ theo từng kỷ nguyên để hiển thị quá trình đào tạo diễn ra như thế nào. Giai đoạn cuối cùng là lưu mô hình dưới dạng tệp.h5 có thể được truy cập sau này cho quá trình dự đoán. Lưu mô hình có nghĩa là mỗi khi chương trình dự đoán được chạy, chương trình đào tạo không cần phải chạy lại. Chương trình đào tạo có thể mất tới 10 phút mỗi kỷ trên pi raspberry.
Đính kèm là tập lệnh Đào tạo:
Bước 3: Thực hiện dự đoán máy ảnh Pi
Chương trình tiếp theo là phần dự đoán và kịch bản nhà xuất bản.
Giai đoạn đầu tiên là tải mô hình bằng cách sử dụng model.load (). Giai đoạn thứ hai là lặp lại các khung hình từ máy ảnh pi bằng opencv và sau đó thay đổi kích thước khung hình thành kích thước giống với kích thước đầu vào được sử dụng trong giai đoạn đào tạo, 32 x 32 pixel. Khi điều này được thực hiện, khung thay đổi kích thước mới được đưa qua mô hình bằng cách sử dụng model.p Dự đoán () tạo ra một ma trận, mỗi phần tử của ma trận là một số thực từ 0 đến 1, chỉ số phần tử giống với lớp mà nó đại diện, do đó phần tử đầu tiên là lớp một và con số là dự đoán về độ chắc chắn của hình ảnh thuộc lớp đó. Ví dụ.
LƯU Ý: Nếu bạn không sử dụng phía rô bốt. Chỉ cần xóa các dòng:
"import rospy"
def talker (hướng):
message = String ()
pub = rospy. Publisher ('robot', String, queue_size = 10)
rospy.init_node ('talker', nặc danh = True)
tin nhắn = hướng
rospy.loginfo (tin nhắn)
pub.publish (tin nhắn)"
"người nói chuyện (hướng)"
Kèm theo đó là script camera Pi.
Bước 4: Robot Arduino
Bước cuối cùng là tập lệnh chương trình robot.
Điều này được viết bằng C ++ và là một tệp.ino cho arduino una. Chương trình yêu cầu thư viện ros có thể được tìm thấy trong trình quản lý thư viện trong Ide. Khi điều này được nhập, có các tệp ví dụ, tôi đã chọn mở rộng trên tệp nhấp nháy dẫn vì điều này sẽ thực hiện một mục tiêu tương tự như những gì tôi cần. Chương trình tiếp tục lặp cho đến khi ngắt nguồn, đầu tiên nó lắng nghe robot chủ đề, khi bắt được lệnh từ chủ đề đó nó sẽ có câu lệnh if để xem câu lệnh đó nói gì. Nếu lệnh bên trái thì tập lệnh sẽ chạy phương thức rẽ trái, nếu lệnh bên phải thì tập lệnh sẽ chạy phương thức rẽ phải và nếu không, tập lệnh sẽ chạy phương thức chuyển tiếp. Ba phương pháp này rất giống nhau, chúng yêu cầu các chân kỹ thuật số là LOW (mặt đất) hoặc 100 (PWM), điều này là để robot không quá nhanh bằng cách yêu cầu trình điều khiển động cơ chỉ để một chút điện áp ra. Thứ tự của các đầu ra này là những gì làm cho robot quay trái và phải hoặc đi về phía trước, điều này là do sự định hướng của điện áp đi đến động cơ.
Đính kèm là tập lệnh.ino cho arduino.
Bước 5: Kiểm tra
Các hình ảnh đính kèm để dự án từ đầu đến cuối. Hình ảnh đầu tiên cho thấy quá trình đào tạo. Sau khi hoàn tất, bản in từ mô hình đã tạo sẽ được hiển thị. Hình ảnh thứ ba hiển thị một dự đoán từ kịch bản đào tạo. đây là giai đoạn cuối cùng của kịch bản đào tạo. Nếu bạn nhìn vào thư mục có tập lệnh đào tạo, một biểu đồ và mô hình đã được tạo. Biểu đồ sẽ giống như hình 4 ở đây, biểu đồ này cho thấy lịch sử của quá trình đào tạo từ đầu đến cuối.
Hình ảnh cuối cùng là khi đang chạy script camera pi, là một luồng trực tiếp từ camera pi. một dự đoán được thực hiện trên mỗi khung và dự đoán được in trong thiết bị đầu cuối. Khung hiển thị những gì máy ảnh đang nhìn thấy.
Đính kèm là báo cáo Đại học của tôi cho dự án này. Vui lòng đọc để biết thêm chi tiết của dự án.
Bước 6: Tất cả các tệp bổ sung
Một số trong số này là các tệp thử nghiệm tôi đã thực hiện trong quá trình thực hiện.
Đề xuất:
Cảm biến tầm nhìn Micro: bit MU cho người mới bắt đầu - Nhận dạng thẻ I2C và thẻ hình dạng: 8 bước
Cảm biến tầm nhìn Micro: bit MU dành cho người mới bắt đầu - I2C và Nhận dạng thẻ hình dạng: Tôi đã sử dụng cảm biến tầm nhìn MU cho Micro: bit. Nó dường như là một công cụ tuyệt vời cho phép tôi thực hiện rất nhiều dự án dựa trên tầm nhìn khác nhau. Đáng buồn thay, dường như không có nhiều hướng dẫn về nó và trong khi tài liệu thực sự là
Nhận dạng và Nhận dạng khuôn mặt - Arduino Face ID sử dụng OpenCV Python và Arduino.: 6 bước
Nhận dạng và Nhận dạng khuôn mặt | Arduino Face ID Sử dụng OpenCV Python và Arduino: Nhận dạng khuôn mặt ID khuôn mặt AKA là một trong những tính năng quan trọng nhất trên điện thoại di động hiện nay. Vì vậy, tôi đã có một câu hỏi " liệu tôi có thể có id khuôn mặt cho dự án Arduino của mình không " và câu trả lời là có … Hành trình của tôi bắt đầu như sau: Bước 1: Truy cập vào chúng tôi
Nhận dạng màu sắc Cảm biến W / TCS230 và Arduino [Bao gồm mã hiệu chuẩn]: 12 bước
Cảm biến W / TCS230 nhận dạng màu sắc và Arduino [Bao gồm mã hiệu chuẩn]: Tổng quan Trong hướng dẫn này, bạn sẽ tìm hiểu về cảm biến TCS230 và cách sử dụng cảm biến này với Arduino để nhận dạng màu sắc. Ở phần cuối của hướng dẫn này, bạn sẽ tìm thấy một ý tưởng hấp dẫn để tạo ra một chiếc bút chọn màu. Với chiếc bút này, bạn có thể quét các màu của th
Hệ thống thông báo mã thông báo: 5 bước
Hệ thống thông báo mã thông báo: Trong phần hướng dẫn trước, chúng ta đã biết cách làm cho Arduino của bạn có thể nói. Hôm nay chúng ta sẽ khám phá thêm một chút về chủ đề tương tự. Tất cả chúng ta đều phải có một lúc nào đó trong đời bắt gặp hệ thống Thông báo có thể là trong ngân hàng hoặc nhà ga xe lửa. Bạn đã bao giờ chiến thắng
Hệ thống bảo mật nhận dạng khuôn mặt cho tủ lạnh với Raspberry Pi: 7 bước (có hình ảnh)
Hệ thống bảo mật nhận dạng khuôn mặt cho tủ lạnh với Raspberry Pi: Duyệt qua internet, tôi đã phát hiện ra rằng giá cho các hệ thống bảo mật thay đổi từ 150 đô la đến 600 đô la trở lên, nhưng không phải tất cả các giải pháp (ngay cả những giải pháp rất đắt tiền) đều có thể được tích hợp với các giải pháp khác công cụ thông minh tại nhà của bạn! Ví dụ: bạn không thể đặt