Mục lục:
- Bước 1: Những thứ được sử dụng trong dự án này
- Bước 2: Ý tưởng?
- Bước 3: Bắt đầu?
- Bước 4: Ghi Raspbian vào thẻ SD?
- Bước 5: Thu thập tập dữ liệu? ️
- Bước 6: Thiết kế NN & Đào tạo Mô hình ⚒️⚙️
- Bước 7: Kiểm tra mô hình ✅
- Bước 8: Trò chơi kéo giấy
- Bước 9: Tích hợp động cơ Servo?
- Bước 10: Hoạt động của Dự án?
- Bước 11: Mã - Repo dự án
Video: Rock Paper Scissor AI: 11 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
Bao giờ cảm thấy buồn chán một mình? Hãy chơi oẳn tù tì với một hệ thống tương tác được hỗ trợ bởi trí thông minh.
Bước 1: Những thứ được sử dụng trong dự án này
Các thành phần phần cứng
- Raspberry Pi 3 Mẫu B + × 1
- Mô-đun máy ảnh Raspberry Pi V2 × 1
- SG90 Động cơ servo vi mô × 1
Ứng dụng phần mềm
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Bước 2: Ý tưởng?
Sau khi làm việc với nhiều dự án trên các lĩnh vực khác nhau, tôi đã lên kế hoạch thực hiện một dự án thú vị và tôi quyết định làm trò oẳn tù tì:)
Trong dự án này, chúng tôi sẽ tạo một trò chơi tương tác và chơi với máy tính được hỗ trợ bởi AI để đưa ra quyết định. AI sử dụng Máy ảnh được kết nối với Raspberry Pi để nhận ra những chuyển động mà người dùng thực hiện bằng tay, phân loại chúng vào danh mục (nhãn) đá, giấy hoặc kéo tốt nhất. Khi máy tính di chuyển, động cơ bước được kết nối với Raspberry Pi sẽ hướng về hướng dựa trên chuyển động của nó.
Các quy tắc phải được xem xét cho trò chơi này:
- Rock blunts cái kéo
- Giấy bao phủ đá
- Kéo cắt giấy
Người chiến thắng sẽ được quyết định dựa trên ba điều kiện trên. Cùng xem demo nhanh về dự án tại đây.
Bước 3: Bắt đầu?
Raspberry Pi
Tôi đã sử dụng Raspberry Pi 3 Model B + có những cải tiến tuyệt vời và Mạnh mẽ hơn Raspberry Pi 3 Model B trước đó.
Raspberry Pi 3 B + được tích hợp bộ xử lý lõi tứ 64-bit 1,4GHz, mạng LAN không dây băng tần kép, Bluetooth 4.2 / BLE, Ethernet nhanh hơn và hỗ trợ Power-over-Ethernet (với PoE HAT riêng biệt).
Thông số kỹ thuật: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz và 5GHz IEEE 802.11.b / g / n / ac LAN không dây, Bluetooth 4.2, BLE, Gigabit Ethernet qua USB 2.0 (thông lượng tối đa 300 Mbps), đầu cắm GPIO 40 chân mở rộng, cổng HDMI4 USB 2.0 kích thước đầy đủ, cổng máy ảnh CSI để kết nối máy ảnh Raspberry Pi, cổng hiển thị DSI để kết nối màn hình cảm ứng Raspberry Pi cổng video, cổng Micro SD để tải hệ điều hành của bạn và lưu trữ dữ liệu Đầu vào nguồn 5V / 2.5A DC, hỗ trợ Power-over-Ethernet (PoE) (yêu cầu PoE HAT riêng biệt).
Động cơ Servo
Chúng tôi sử dụng động cơ servo SG-90, động cơ mô-men xoắn cao có thể chịu tải lên đến 2,5kg (1 cm).
Máy ảnh USB
Một máy ảnh USB để làm cho trò chơi tương tác với quá trình xử lý hình ảnh
Một số cáp Jumper được sử dụng để nối dây động cơ bước và Raspberry Pi.
Bước 4: Ghi Raspbian vào thẻ SD?
Raspbian là bản phân phối Linux được lựa chọn chạy trên Raspberry Pi. Trong hướng dẫn này, chúng tôi sẽ sử dụng phiên bản Lite, nhưng phiên bản Desktop (đi kèm với môi trường đồ họa) cũng có thể được sử dụng.
- Tải xuống Etcher và cài đặt nó.
- Kết nối đầu đọc thẻ SD với thẻ SD bên trong.
- Mở Etcher và chọn từ ổ cứng của bạn tệp.img hoặc.zip Raspberry Pi mà bạn muốn ghi vào thẻ SD.
- Chọn thẻ SD mà bạn muốn ghi hình ảnh của mình vào.
- Xem lại các lựa chọn của bạn và nhấp vào 'Flash!' để bắt đầu ghi dữ liệu vào thẻ SD.
Kết nối thiết bị với mạng của bạn
- Bật quyền truy cập SSH bằng cách thêm ssh tệp trống, lại được đặt ở gốc của ổ đĩa khởi động trên thẻ SD của bạn.
- Gắn thẻ SD vào Raspberry Pi. Nó sẽ khởi động trong khoảng 20 giây. Bây giờ bạn sẽ có quyền truy cập SSH vào Raspberry Pi của mình. Theo mặc định, tên máy chủ của nó sẽ là raspberrypi.local. Trên máy tính của bạn, hãy mở một cửa sổ dòng lệnh và nhập như sau:
Mật khẩu mặc định là raspberry
Ở đây tôi đã sử dụng một màn hình riêng để giao tiếp với Raspberry Pi.
Bước 5: Thu thập tập dữ liệu? ️
Bước đầu tiên trong dự án này là thu thập dữ liệu. Hệ thống phải xác định cử chỉ tay và nhận dạng hành động và làm cho nó di chuyển cho phù hợp.
Chúng tôi cài đặt một số thư viện cho Raspberry Pi bằng cách sử dụng cài đặt pip
chỉ huy.
sudo apt-get update && sudo apt-get liftdesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip install numpy pip install scikit-learning pip install scikit-image pip install h5py pip install Keras pip cài đặt tensorflow pip cài đặt pip Werkzeug cài đặt Keras-Ứng dụng pip cài đặt Keras-Preprocessing pip cài đặt keras-bópzenet pip cài đặt pip astor cài đặt tensorboard pip cài đặt tensorflow-ước tính pip cài đặt mock pip cài đặt grpcio pip cài đặt absl-pypip cài đặt gast pip cài đặt joblib pip cài đặt Markdown pip cài đặt protobuf pip cài đặt PyYAML pip cài đặt sáu
Nếu bạn gặp bất kỳ sự cố nào với OpenCVpackage, tôi thực sự khuyên bạn nên cài đặt các gói này.
sudo apt-get install libhdf5-dev
sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test
Chúng tôi đã cài đặt tất cả các phụ thuộc bắt buộc cho dự án này. Tập dữ liệu được tạo ra bởi các bộ sưu tập và sắp xếp các hình ảnh dưới nhãn thích hợp.
Ở đây, chúng tôi tạo hình ảnh tập dữ liệu cho nhãn đá, giấy và hình cắt kéo bằng cách sử dụng đoạn mã sau.
roi = frame [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Hình ảnh được chụp cho mỗi nhãn (đá, giấy, cắt kéo và Không có).
Bước 6: Thiết kế NN & Đào tạo Mô hình ⚒️⚙️
Cốt lõi của dự án này là một bộ phân loại hình ảnh phân loại một trong ba loại. Để tạo Bộ phân loại này, chúng tôi sử dụng CNN (Mạng lưới hợp pháp) được đào tạo trước có tên là SqueezeNet.
Ở đây chúng tôi sử dụng Keras và TensorFlow để tạo mô hình SqueezeNet có thể xác định cử chỉ. Các hình ảnh mà chúng tôi đã tạo trong bước trước được sử dụng để đào tạo mô hình. Mô hình được đào tạo bằng cách sử dụng Tập dữ liệu được tạo cho không có Kỷ nguyên (Chu kỳ) nào được đề cập.
Mô hình được cấu hình với các siêu tham số như hình dưới đây.
model = Sequential ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Bỏ học (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Kích hoạt ('relu'), GlobalAveragePooling2D (), Kích hoạt ('softmax')])
Trong khi mô hình đang được đào tạo, bạn có thể tìm thấy sự mất mát và độ chính xác của mô hình cho mỗi Kỷ nguyên và độ chính xác tăng lên tại một số thời điểm sau một vài Kỷ nguyên.
Khoảng 2 giờ để tạo ra mô hình với độ chính xác cao nhất sau 10 kỷ. Nếu bạn gặp bất kỳ lỗi phân bổ bộ nhớ nào, hãy thực hiện các bước sau (Cảm ơn Adrian)
Để tăng không gian hoán đổi của bạn, hãy mở / etc / dphys-swapfile và sau đó chỉnh sửa biến CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Lưu ý rằng tôi đang tăng hoán đổi từ 100MB lên 1024MB. Từ đó, hãy khởi động lại dịch vụ hoán đổi:
$ sudo /etc/init.d/dphys-swapfile dừng
$ sudo /etc/init.d/dphys-swapfile start
Ghi chú:
Tăng kích thước hoán đổi là một cách tuyệt vời để tiêu hết thẻ nhớ của bạn, vì vậy hãy đảm bảo hoàn nguyên thay đổi này và khởi động lại dịch vụ hoán đổi khi bạn hoàn tất. Bạn có thể đọc thêm về kích thước lớn làm hỏng thẻ nhớ tại đây.
Bước 7: Kiểm tra mô hình ✅
Khi mô hình được tạo, Nó sẽ tạo ra tệp đầu ra "oẳn tù tì-mô hình.h5". Tệp này được sử dụng làm nguồn để kiểm tra xem hệ thống có thể xác định các cử chỉ tay khác nhau và có thể phân biệt các hành động hay không.
Mô hình được tải trong tập lệnh python như sau
model = load_model ("oẳn tù tì-mô hình.h5")
Máy ảnh đọc hình ảnh thử nghiệm và chuyển đổi mô hình màu cần thiết, sau đó thay đổi kích thước hình ảnh thành 227 x 227 pixel (Cùng kích thước được sử dụng để tạo mô hình). Các hình ảnh được sử dụng để đào tạo mô hình có thể được sử dụng để kiểm tra mô hình đã tạo.
img = cv2.imread (đường dẫn tệp)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Sau khi mô hình được tải và máy ảnh thu được hình ảnh, mô hình sẽ dự đoán hình ảnh đã chụp bằng cách sử dụng mô hình SqueezeNet được tải và đưa ra dự đoán cho chuyển động của người dùng.
pred = model.p Dự đoán (np.array ())
move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Dự đoán: {}". format (move_name))
Chạy tập lệnh test.py để kiểm tra mô hình với các hình ảnh thử nghiệm khác nhau.
python3 test.py
Bây giờ mô hình đã sẵn sàng để phát hiện và hiểu các cử chỉ tay.
Bước 8: Trò chơi kéo giấy
Trò chơi sử dụng chức năng tạo số ngẫu nhiên để quyết định nước đi của máy tính. Nó tuân theo các quy tắc nói trên để xác định người chiến thắng. Trò chơi được thiết kế với hai chế độ: Chế độ bình thường và Chế độ thông minh, trong đó chế độ thông minh phản công chuyển động của người dùng, tức là Máy tính thắng tất cả các bước di chuyển chống lại người dùng.
cap = cv2. VideoCapture (0) # Để chụp ảnh từ Máy ảnh
Bây giờ chúng ta hãy tạo trò chơi ở chế độ Bình thường trong đó hệ thống / Raspberry Pi chụp ảnh bàn tay và phân tích và xác định cử chỉ tay. Sau đó, sử dụng một trình tạo số ngẫu nhiên, chuyển động của máy tính được thực hiện. Người chiến thắng được chọn dựa trên các quy tắc và sau đó hiển thị trên màn hình. Bắt đầu trò chơi bằng lệnh sau.
python3 play.py
Bước 9: Tích hợp động cơ Servo?
Cuối cùng, hãy thêm động cơ servo vào dự án này. Động cơ Servo là chân GPIO 17 của Raspberry Pi, có chức năng PWM để điều khiển góc quay.
Động cơ Servo được sử dụng trong dự án này là SG-90. Nó có thể quay theo chiều kim đồng hồ và ngược chiều kim đồng hồ lên đến 180 °
Các kết nối được đưa ra như sau.
Động cơ Servo - Raspberry Pi
Vcc - + 5V
GND - GND
Tín hiệu - GPIO17
Các thư viện như RPi. GPIO và thời gian được sử dụng trong dự án này.
nhập RPi. GPIO dưới dạng GPIO
thời gian nhập khẩu
Sau đó, chân GPIO được định cấu hình thành PWM bằng các dòng sau
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 được cấu hình để sử dụng như một PWM ở tần số 50Hz. Góc của động cơ servo đạt được bằng cách thiết lập chu kỳ làm việc (Ton & Toff) của PWM
nhiệm vụ = góc / 18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (tác vụ) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Điều này sẽ tạo ra góc bước mong muốn cho mọi xung, điều này sẽ cho góc quay mong muốn.
Bây giờ tôi đã lấy biểu đồ và cắt nó thành ba phần, cho đá, giấy và cắt kéo. Động cơ Servo được cố định vào tâm của biểu đồ. Con trỏ / nắp được kết nối với trục của động cơ servo. Trục này chỉ chuyển động của máy tính theo logic được tính toán trong tập lệnh.
Bước 10: Hoạt động của Dự án?
Và bây giờ, đó là giờ chơi. Chúng ta hãy xem hoạt động của dự án.
Nếu bạn gặp bất kỳ vấn đề nào trong quá trình xây dựng dự án này, hãy hỏi tôi. Vui lòng đề xuất các dự án mới mà bạn muốn tôi làm tiếp theo.
Hãy ủng hộ nếu nó thực sự có ích cho bạn và hãy theo dõi kênh của tôi để biết những dự án thú vị.:)
Chia sẻ video này nếu bạn thích.
Rất vui khi bạn đã đăng ký:
Cảm ơn vì đã đọc!
Bước 11: Mã - Repo dự án
Mã được thêm vào Kho lưu trữ GitHub, bạn có thể tìm thấy mã này trong phần mã.
Rahul24-06 / Rock-Paper-Scissors -
Đề xuất:
Tự tạo bộ điều hợp bộ Ekit cho ban nhạc rock của riêng bạn (không có bộ điều hợp kế thừa), không bị phá hủy !: 10 bước
Tự tạo bộ điều hợp bộ điều hợp băng tần Rock của riêng bạn (không có bộ điều hợp kế thừa), không bị phá hủy !: Sau khi nghe một người dẫn chương trình podcast nổi tiếng đề cập đến mối quan tâm của anh ấy về việc bộ điều hợp cũ có dây của anh ấy sắp chết, tôi đã tìm kiếm một giải pháp DIY để kết nối eKit tùy chỉnh / tốt hơn với RB . Cảm ơn Mr DONINATOR trên Youtube, người đã thực hiện một video mô tả chi tiết về p
Mũ Servo của Scissor Drive: 4 bước (có hình ảnh)
Scissor Drive Servo Hat: Dự án động cơ servo và in 3D đơn giản này là một tình cảm tốt đẹp dành cho Simone Giertz, một nhà sản xuất tuyệt vời vừa được phẫu thuật cắt bỏ khối u não. Thiết bị cắt kéo được truyền động bởi một động cơ servo vi mô và bộ vi điều khiển Trinket chạy một chút Ard
Biến trống X-box Rock Band thành trống điện tử Midi Stand Alone.: 4 bước (có hình ảnh)
Biến trống X-box Rock Band thành trống điện tử Midi Stand Alone: Tôi may mắn có được một bộ trống x-box đã qua sử dụng, nó có hình dạng hơi thô và không có mái chèo, nhưng không có gì không thể sửa được. biến nó thành một bộ trống điện độc lập. Đọc giá trị tương tự từ cảm biến piezo và chuyển giá trị đó thành dấu phẩy MIDI
Robot điều khiển từ xa Rock Crawler Arduino: 4 bước
Robotics Rock Crawler điều khiển từ xa Arduino: Cái này trông rất hầm hố. Tôi khuyên những ai muốn thực hiện dự án này hãy xem xét một số cách che các thiết bị điện tử để bảo vệ khỏi nước và bụi bẩn
Rock Buggy Body cho RedCat Gen7: 9 bước (có hình ảnh)
Rock Buggy Body for RedCat Gen7: Inspiration3D Các phụ kiện in ấn và thậm chí toàn bộ cơ thể rất phổ biến trong cộng đồng RC, đặc biệt là trong thể loại RC Crawlers. Bản thân tôi và những người khác đã phát hành tất cả các loại dự án miễn phí, nhưng điều chưa từng xảy ra là các nhà sản xuất phải từ bỏ