Mục lục:

Một cảm biến màu biết nói, dựa trên Bộ giọng nói AIY: 4 bước
Một cảm biến màu biết nói, dựa trên Bộ giọng nói AIY: 4 bước

Video: Một cảm biến màu biết nói, dựa trên Bộ giọng nói AIY: 4 bước

Video: Một cảm biến màu biết nói, dựa trên Bộ giọng nói AIY: 4 bước
Video: [Vietsub] Dòng thác thời gian - Trình Hưởng || 时光洪流 - 程响 2024, Tháng mười một
Anonim
Một bộ cảm biến màu biết nói, dựa trên Bộ giọng nói AIY
Một bộ cảm biến màu biết nói, dựa trên Bộ giọng nói AIY
Một bộ cảm biến màu biết nói, dựa trên Bộ giọng nói AIY
Một bộ cảm biến màu biết nói, dựa trên Bộ giọng nói AIY
Một bộ cảm biến màu biết nói, dựa trên Bộ giọng nói AIY
Một bộ cảm biến màu biết nói, dựa trên Bộ giọng nói AIY
Một bộ cảm biến màu biết nói, dựa trên Bộ giọng nói AIY
Một bộ cảm biến màu biết nói, dựa trên Bộ giọng nói AIY

Gần đây, tôi đã tìm hiểu một chút về chữ nổi Braille, tôi đã tự hỏi liệu mình có thể xây dựng thứ gì đó bằng cách sử dụng bộ giọng nói AIY cho Raspberry Pi hay không, điều này có thể mang lại lợi ích thực tế cho người khiếm thị. Vì vậy, được mô tả trong phần sau, bạn sẽ tìm thấy một nguyên mẫu của một thiết bị phát hiện màu sắc đơn giản có thể đọc to những phát hiện của nó.

Một phiên bản phức tạp hơn của hệ thống này có thể hữu ích cho những người bị khiếm thị hoặc mù màu.

Hệ thống đang sử dụng Raspberry Pi có gắn AIY voice HAT. Một đột phá cảm biến RGB TCS34725 được kết nối với cổng I2C của HAT. Điểm ngắt có chứa một đèn LED màu trắng ấm sáng để chiếu sáng đối tượng cần phân tích. Thiết bị đột phá được đặt trong một vỏ để tối ưu hóa và tiêu chuẩn hóa các điều kiện đo lường.

Ba cảm biến màu đo về ba dải tần số giống như các cảm biến màu trong mắt bạn. Sau đó, các giá trị màu đỏ, xanh lục và xanh lam (RGB) được sử dụng để tính toán hiển thị màu tổng thể.

Điều thú vị về hệ thống đặc biệt này là giờ đây nó cho bạn biết màu sắc bằng lời nói, sử dụng lệnh "nói" của bộ dụng cụ giọng nói AIY. Mời các bạn xem qua video đi kèm.

Thiết bị này cũng có thể hữu ích làm ví dụ cho thiết bị cảm biến I2C được kết nối với HAT thoại AIY.

Bước 1: Vật liệu được sử dụng

Raspberry Pi 3. ~ 35 US $ hoặc EUR

Bộ giọng nói AIY, với các tiêu đề được hàn vào HAT. ~ 25US $ hoặc EUR

Đột phá Adafruit TCS34725, với một đầu được hàn. ~ 8 US $ hoặc EUR

Cáp nhảy.

Một breadboard (tùy chọn)

Đối với vỏ cảm biến: - viên nén cà phê "Dolce Gusto" đã qua sử dụng- một miếng tròn nhỏ 2mm Forex (tấm xốp PVC), đường kính khoảng 37mm- vật liệu đen không phản xạ để che các bức tường bên trong của vỏ. Tôi đã sử dụng bọt cao su đen tự dính.

Tùy chọn: một công tắc nhỏ để gợi ý các phép đo

Một vài giọt keo nhựa và một con dao cắt.

Bước 2: Lắp ráp và sử dụng

Lắp ráp và sử dụng
Lắp ráp và sử dụng
Lắp ráp và sử dụng
Lắp ráp và sử dụng
Lắp ráp và sử dụng
Lắp ráp và sử dụng

Raspberry Pi với AIY voice HAT đã được thiết lập như được mô tả trong sách hướng dẫn AIY. Trước khi lắp ráp, các tiêu đề đã được hàn vào các cổng trên HAT. Đối với vỏ của cảm biến, viên nén cà phê "Dulce Gusto" đã được làm rỗng, làm sạch và một phần của đáy được lấy ra cẩn thận bằng dao. Bạn có thể sử dụng thứ gì đó khác cho mục đích này, viên nén cà phê chỉ có kích thước và hình dạng phù hợp. Một miếng Forex tròn 2mm được cắt ra từ một tấm, phần breakout sau đó được đặt chính giữa trên tấm Forex, vị trí được đánh dấu bằng bút dạ và một khe cho tiêu đề trên breakout được cắt ở vị trí thích hợp.

Bây giờ, miếng Forex đã được dán vào vỏ và bộ phận cảm biến được gắn vào tấm Forex, bằng cách sử dụng một dải Velcro. Sau đó, các bức tường bên trong được phủ bằng vật liệu màu đen hấp thụ ánh sáng, tôi sử dụng một loại bọt cao su tự dính. Các tông đen cũng nên hoạt động. Bây giờ, bằng cách sử dụng cáp jumper, cổng I2C "3.3V" của HAT được kết nối với "V in" trên cảm biến, Ground tới Gnd, sda sang sda và scl sang scl. Tôi đã sử dụng một breadboard để kết nối cả hai phần, nhưng điều đó không cần thiết.

Đặt tập lệnh python AIY_TCS34725 trong thư mục src và chạy tập lệnh từ thiết bị đầu cuối của nhà phát triển, nhập "sec / AIY_TCS34752.py". Trước tiên, bạn có thể phải thực thi tập lệnh python. Khi được yêu cầu, hãy đặt bộ cảm biến lên đối tượng cần đo, nhấn nút trên thiết bị AIY và đợi một hoặc hai giây.

Sau đó, dựa trên các giá trị màu trắng và RGB đo được, trước tiên thiết bị sẽ tính toán giá trị màu tương ứng, sau đó ước tính màu sắc dựa trên giá trị này và truyền đạt chúng bằng lời nói qua hệ thống giọng nói AIY, e. NS. là "đỏ sẫm", nhưng cũng cung cấp giá trị màu. Các giá trị RGB, màu sắc và độ sáng (chính xác là độ sáng) cũng được in ra màn hình.

Để đơn giản hóa quá trình chú thích màu sắc, các giá trị RGB được chuyển đổi thành định dạng HSV (màu sắc, độ bão hòa, giá trị). Điều này cho phép chú thích một màu theo một phạm vi góc nhất định (tức là một lát bánh) và chọn màu dựa trên giá trị sắc độ được tính toán.

Bạn cần chuẩn hóa thiết bị của mình dựa trên tham chiếu trắng và đen. Chỉ cần đo các mẩu giấy trắng nhất và đen nhất mà bạn có sẵn, đo từng mẩu và đặt các giá trị này làm giá trị tối đa và nhỏ nhất vào mã. Chỉ các giá trị tham chiếu tối ưu mới cho khả năng nhận dạng màu tốt.

Một vấn đề cơ bản là sự phản ánh. Nếu bạn có một vật có bề mặt bóng hoặc được đánh bóng, nó sẽ phản xạ nhiều ánh sáng do đèn LED phát ra, trông nhẹ hơn nhiều so với thực tế. Bạn có thể sử dụng một tấm màng để tán xạ ánh sáng, nhưng bạn có thể cần thực hiện một hệ số hiệu chỉnh.

Trong trường hợp vật thể trong mờ, có thể hữu ích khi đặt chúng trên giấy trắng, nếu không lượng ánh sáng phản xạ sẽ nhỏ và vật thể được báo cáo là "đen".

Nếu bạn muốn đo màu của các vật thể phát ra ánh sáng, bạn nên tắt đèn LED trên breakout bằng cách kết nối cổng "LED" trên breakout với "Ground". Bây giờ hãy đặt các giá trị chuẩn hóa cho phù hợp.

Một vấn đề chung khác là độ chiếu sáng của vật thể. Đèn LED màu trắng ấm trên breakout phát ra quang phổ ánh sáng không liên tục. Do đó, một số màu nhất định có thể được thể hiện quá nhiều hoặc ít trong phổ RGB. Để biết thêm thông tin về chủ đề này, vui lòng xem các hướng dẫn trước đây của tôi về máy đo màu / quang kế và quang phổ kế:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

Bước 3: Mã

Mật mã
Mật mã

Mã này là sự kết hợp của việc sửa đổi mã từ sổ tay hướng dẫn bằng giọng nói AIY và mã cảm biến TCS34725 của Bradspi.

Tôi cũng đã cố gắng sử dụng mã python TCS34725 từ Adafruit, nhưng đã gặp sự cố khi chạy mã này và một số mã khác đang sử dụng thư viện bên ngoài kết hợp với AIY HAT. Mọi sự giúp đỡ đều được chào đón.

Như đã đề cập trước đây, chú thích màu sắc dựa trên sự chuyển đổi trên giá trị RGB sang màu sắc. Bạn phải đặt cài đặt chuẩn hóa dựa trên các phép đo thử nghiệm của vật liệu tôn kính màu trắng và đen. Điền các giá trị tuyệt đối cho R, G và B tối thiểu hoặc tối đa tương ứng.

Tập lệnh sử dụng một phiên bản mới của lệnh "say" cho phép điều chỉnh âm lượng và cao độ. Trong trường hợp, bạn có thể phải cập nhật tệp trình điều khiển audio.py và tty hoặc xóa "phần âm lượng và cao độ" khỏi tập lệnh.

#! / usr / bin / env python3 # Tập lệnh này là bản chuyển thể của tập lệnh servo_demo.py cho HAT giọng nói AIY, # được tối ưu hóa để nhận dạng màu sắc cho đột phá Afafruit TCS34725 import aiy.audio import aiy.cloudspeech import aiy.voicehat # từ đèn LED nhập gpiozero # có thể hữu ích cho đèn LED bên ngoài trên cổng servo # từ nút nhập gpiozero # có thể hữu ích cho nút bên ngoài trên thời gian nhập cổng servo nhập smbus bus = smbus. MBus (1) import Colorsys def hue2color (màu): # giải thích màu dựa trên các giá trị màu được tính toán nếu ((màu> 12) và (màu 25) và (màu 69) và (màu 164) và (màu 194) và (màu 269) và (màu 319) hoặc (hue <20)): color = "red" trả về màu khác: print ("đã xảy ra lỗi")

def tcs34725 (): # đo lường và giải thích.

# Phép đo được thực hiện bởi tập lệnh Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # phiên bản # phải là 0x44 nếu ver == 0x44: print ("Đã tìm thấy thiết bị / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = BẬT thanh ghi bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Bật nguồn, Cảm biến 0x02 RGB đã kích hoạt bus.write_byte (0x29, 0x80 | 0x14) # Đọc kết quả bắt đầu thanh ghi 14, LSB sau đó MSB data = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | data [0] red = data [3] << 8 | data [2] green = data [5] << 8 | data [4] blue = data [7] << 8 | data [6] crgb = "Tổng số tuyệt đối: C:% s, R:% s, G:% s, B:% s / n"% (clear, red, green, blue) print (crgb) time.sleep (1) else: print ("Không tìm thấy thiết bị / n") # chuẩn hóa và chuyển đổi các giá trị RGBW đo được col = "" # Giá trị lớn nhất Các yếu tố chuẩn hóa, phải được xác định bằng thực nghiệm # ví dụ: so với một tờ giấy trắng. Kiểm tra và sửa chữa theo thời gian. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Nền / Giá trị tối thiểu các yếu tố chuẩn hóa, phải được xác định bằng thực nghiệm # ví dụ: so với tờ giấy đen. Kiểm tra và sửa chữa theo thời gian. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # giá trị chuẩn hóa, từ 0 đến 1 rel_bright = ((clear - min_bright) / (max_bright - min_bright)) rel_red = ((red - min_red) / (max_red - min_red)) rel_green = ((green - min_green) / (max_green - min_green)) rel_blue = ((blue - min_blue) / (max_blue - min_blue)) hsv_col = Colorsys.rgb_to_hsv (rel_red, rel_green, rel_blue) hue = hsv_col [0] * 359col if rel_bright> 0.9: col = "white" # nếu rất sáng -> trắng elif rel_bright black else: col = hue2color (hue) # lựa chọn màu theo giá trị màu # print ("các giá trị tương đối sáng, đỏ, lục, lam:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("Các giá trị HSV (hue, saturation, value):", hsv_col) # print ("hue in °", hue) return [col, rel_bright, rel_red, rel_green, rel_blue, hue]

def main ():

button = aiy.voicehat.get_button () # change Trạng thái nút led = aiy.voicehat.get_led () # thay đổi trạng thái Nút-LED aiy.audio.get_recorder (). start () # môngni = Nút (5) # cảm biến khoảng cách hoặc nút bên ngoài khác, được kết nối với servo3 / GPIO 05

aiy.audio.say ("Xin chào!", volume = 50, pitch = 100) # âm lượng và cao độ yêu cầu sửa đổi tháng 11 năm 2017 của trình điều khiển audio.py và _tty.py!

aiy.audio.say ("Để bắt đầu, hãy di chuyển cảm biến lên trên vật thể. Sau đó nhấn nút màu xanh lam",, volume = 50, pitch = 100) print ("Để kích hoạt vị trí đo màu cảm biến phía trên vật thể, sau đó nhấn nút màu xanh lam ") trong khi True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # đối với nút bên ngoài, thay thế nút bằng Butni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Đo lường ",, volume = 50, pitch = 100) result = tcs34725 () # gợi lên phép đo và giải thích col = result [0] # color, as text hue = str (int (result [5])) # hue in °, dưới dạng văn bản r_red = str (int (kết quả [2] * 255)) Giá trị # R, dưới dạng văn bản r_green = str (int (kết quả [3] * 255)) Giá trị # G, dưới dạng văn bản r_blue = str (int (kết quả [4] * 255)) Giá trị # B, dưới dạng văn bản r_bright = str (int (result [1] * 100)) Giá trị # W, dưới dạng văn bản led.set_state (aiy.voicehat. LED. OFF) nếu col == "trắng "hoặc col ==" black ": Bright =" "elif (result [1]> 0,69): # độ sáng / độ đậm nhạt của màu sáng =" light "elif (kết quả [1] <0,25): sáng =" tối "khác: sáng = "phương tiện" # giao tiếp t kết quả là color_text = ("Màu của đối tượng là" + sáng + "" + col) print (color_text) aiy.audio.say (color_text,, volume = 75, pitch = 100) hue_text = ("Giá trị màu là "+ hue +" độ ") print (hue_text) aiy.audio.say (hue_text,, volume = 75, pitch = 100)

if _name_ == '_main_': main ()

Bước 4: Một số liên kết và nhận xét

Bảng dữ liệu cảm biến TCS34725 có thể được tìm thấy tại đây:

Mã để đọc cảm biến tôi đã sử dụng được mô tả ở đây:

Bạn có thể tìm thấy một số thông tin bổ sung về phép đo màu với cảm biến này và cảm biến khác trong các tài liệu hướng dẫn trước đây của tôi:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

Đề xuất: