Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in die Welt von Raspberry Pi, Arduino und ESP32 ein.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezielle Rabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Verlosungen: Nehmen Sie an Gewinnspielen und saisonalen Aktionen teil.
👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [hier] und treten Sie noch heute bei!
5. Computer Vision
Dieses Projekt führt Sie offiziell in das Gebiet der Computer Vision ein!
Code ausführen
cd ~/picrawler/examples
sudo python3 5_display.py
Bild anzeigen
Nach dem Start des Codes wird im Terminal folgende Eingabeaufforderung angezeigt:
No desktop !
* Serving Flask app "vilib.vilib" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:9000/ (Press CTRL+C to quit)
Dann können Sie im Browser http://<Ihre IP>:9000/mjpg eingeben, um den Videostream anzuzeigen. Beispiel: http://192.168.18.113:9000/mjpg
Nach dem Start des Programms werden folgende Informationen angezeigt:
Geben Sie eine Taste ein, um eine Funktion aufzurufen!
q: Foto aufnehmen1: Farberkennung: Rot2: Farberkennung: Orange3: Farberkennung: Gelb4: Farberkennung: Grün5: Farberkennung: Blau6: Farberkennung: Lila0: Farberkennung ausschaltenr: QR-Code scannenf: Gesichts- und Farberkennung ein-/ausschaltens: Erfasste Objektinformationen anzeigen
Befolgen Sie die Anweisungen, um die entsprechenden Funktionen zu aktivieren.
Foto aufnehmen
Geben Sie
qin das Terminal ein. Das aktuell von der Kamera gesehene Bild wird gespeichert (wenn die Farberkennungsfunktion aktiviert ist, wird auch der Markierungsrahmen im gespeicherten Bild angezeigt). Diese Fotos finden Sie im Verzeichnis~/Pictures/PiCrawler/auf dem Raspberry Pi. Sie können Tools wie FileZilla Software verwenden, um die Fotos auf Ihren PC zu übertragen.Farberkennung
Wenn Sie eine Zahl zwischen
1~6eingeben, wird eine der Farben „Rot, Orange, Gelb, Grün, Blau, Lila“ erkannt. Geben Sie0ein, um die Farberkennung auszuschalten.![]()
Bemerkung
Sie können die
PDF-Farbkartenfür die Farberkennung herunterladen und ausdrucken.Gesichtserkennung
Geben Sie
fein, um die Gesichtserkennung zu aktivieren.![]()
QR-Code-Erkennung
Geben Sie
rein, um die QR-Code-Erkennung zu aktivieren. Bevor der QR-Code erkannt wird, können keine weiteren Aktionen ausgeführt werden. Die Decodierungsinformationen des QR-Codes werden im Terminal angezeigt.![]()
Informationen anzeigen
Geben Sie
sein, um die Informationen des Gesichtserkennungs- (und Farberkennungs-) Ziels im Terminal anzuzeigen, einschließlich der Koordinaten (X, Y) und der Größe (Breite, Höhe) des gemessenen Objekts.
Code
from vilib import Vilib
from time import sleep, time, strftime, localtime
import threading
import readchar
from os import getlogin
USERNAME = getlogin()
PICTURE_PATH = f"/home/{USERNAME}/Pictures/"
flag_face = False
flag_color = False
qr_code_flag = False
MANUAL = '''
Press a key to call the function:
q: Take photo
1: Color detect : red
2: Color detect : orange
3: Color detect : yellow
4: Color detect : green
5: Color detect : blue
6: Color detect : purple
0: Switch off Color detect
r: Scan the QR code (toggle)
f: Switch ON/OFF face detect
s: Display detected object information
Ctrl+C: Quit
'''
color_list = ['close', 'red', 'orange', 'yellow', 'green', 'blue', 'purple']
def face_detect(flag):
print("Face Detect:", flag)
Vilib.face_detect_switch(flag)
def qrcode_detect():
global qr_code_flag
Vilib.qrcode_detect_switch(True)
print("Waiting for QR code...")
text = None
while qr_code_flag:
temp = Vilib.detect_obj_parameter.get('qr_data', "None")
if temp != "None" and temp != text:
text = temp
print("QR code:", text)
sleep(0.2)
Vilib.qrcode_detect_switch(False)
def take_photo():
_time = strftime('%Y-%m-%d-%H-%M-%S', localtime(time()))
name = f'photo_{_time}'
Vilib.take_photo(name, PICTURE_PATH)
print(f'Photo saved as {PICTURE_PATH}{name}.jpg')
def object_show():
global flag_color, flag_face
if flag_color:
if Vilib.detect_obj_parameter.get('color_n', 0) == 0:
print('Color Detect: None')
else:
x = Vilib.detect_obj_parameter.get('color_x')
y = Vilib.detect_obj_parameter.get('color_y')
w = Vilib.detect_obj_parameter.get('color_w')
h = Vilib.detect_obj_parameter.get('color_h')
print("[Color Detect] Coordinate:", (x, y), "Size:", (w, h))
if flag_face:
if Vilib.detect_obj_parameter.get('human_n', 0) == 0:
print('Face Detect: None')
else:
x = Vilib.detect_obj_parameter.get('human_x')
y = Vilib.detect_obj_parameter.get('human_y')
w = Vilib.detect_obj_parameter.get('human_w')
h = Vilib.detect_obj_parameter.get('human_h')
print("[Face Detect] Coordinate:", (x, y), "Size:", (w, h))
def main():
global flag_face, flag_color, qr_code_flag
qrcode_thread = None
Vilib.camera_start(vflip=False, hflip=False)
Vilib.display(local=True, web=True)
print(MANUAL)
try:
while True:
key = readchar.readkey().lower()
if key == 'q':
take_photo()
elif key in '0123456':
index = int(key)
if index == 0:
flag_color = False
Vilib.color_detect('close')
else:
flag_color = True
Vilib.color_detect(color_list[index])
print('Color detect:', color_list[index])
elif key == 'f':
flag_face = not flag_face
face_detect(flag_face)
elif key == 'r':
qr_code_flag = not qr_code_flag
if qr_code_flag:
if qrcode_thread is None or not qrcode_thread.is_alive():
qrcode_thread = threading.Thread(target=qrcode_detect, daemon=True)
qrcode_thread.start()
else:
print('QRcode Detect: close')
elif key == 's':
object_show()
sleep(0.05)
except KeyboardInterrupt:
print("\nQuit.")
finally:
# Stop QR thread and switches
qr_code_flag = False
try:
Vilib.qrcode_detect_switch(False)
except Exception:
pass
try:
Vilib.color_detect('close')
except Exception:
pass
try:
Vilib.face_detect_switch(False)
except Exception:
pass
# Close camera
try:
Vilib.camera_close()
except Exception:
pass
if __name__ == "__main__":
main()
Funktionsweise
Zu Beginn sollten Sie folgende Funktionen beachten, die die Kamera starten:
Vilib.camera_start()
Vilib.display()
Funktionen zur „Objekterkennung“:
Vilib.face_detect_switch(True): Aktiviert/deaktiviert die Gesichtserkennung.Vilib.color_detect(color): Erkennt Farben. Nur eine Farbe kann gleichzeitig erkannt werden. Eingabewerte:"red","orange","yellow","green","blue","purple".Vilib.color_detect_switch(False): Deaktiviert die Farberkennung.Vilib.qrcode_detect_switch(False): Aktiviert/deaktiviert die QR-Code-Erkennung. Gibt dekodierte QR-Daten zurück.Vilib.gesture_detect_switch(False): Aktiviert/deaktiviert die Gestenerkennung.Vilib.traffic_sign_detect_switch(False): Aktiviert/deaktiviert die Verkehrsschilderkennung.
Die erkannten Informationen werden in detect_obj_parameter = Manager().dict() gespeichert.
Im Hauptprogramm können Sie auf diese Weise darauf zugreifen:
Vilib.detect_obj_parameter['color_x']
Die Schlüssel des Wörterbuchs und ihre Verwendungen sind in der folgenden Liste dargestellt:
color_x: Der x-Wert der zentralen Koordinate des erkannten Farbfeldes, der Bereich ist 0~320.color_y: Der y-Wert der zentralen Koordinate des erkannten Farbfeldes, der Bereich ist 0~240.color_w: Die Breite des erkannten Farbfeldes, der Bereich ist 0~320.color_h: Die Höhe des erkannten Farbfeldes, der Bereich ist 0~240.color_n: Die Anzahl der erkannten Farbfelder.human_x: Der x-Wert der zentralen Koordinate des erkannten menschlichen Gesichts, der Bereich ist 0~320.human_y: Der y-Wert der zentralen Koordinate des erkannten Gesichts, der Bereich ist 0~240.human_w: Die Breite des erkannten menschlichen Gesichts, der Bereich ist 0~320.human_h: Die Höhe des erkannten Gesichts, der Bereich ist 0~240.human_n: Die Anzahl der erkannten Gesichter.traffic_sign_x: Der x-Wert der zentralen Koordinate des erkannten Verkehrsschildes, der Bereich ist 0~320.traffic_sign_y: Der y-Wert der zentralen Koordinate des erkannten Verkehrsschildes, der Bereich ist 0~240.traffic_sign_w: Die Breite des erkannten Verkehrsschildes, der Bereich ist 0~320.traffic_sign_h: Die Höhe des erkannten Verkehrsschildes, der Bereich ist 0~240.traffic_sign_t: Der Inhalt des erkannten Verkehrsschildes, die Werteliste lautet [‚stop‘,‘right‘,‘left‘,‘forward‘].gesture_x: Der x-Wert der zentralen Koordinate der erkannten Geste, der Bereich ist 0~320.gesture_y: Der y-Wert der zentralen Koordinate der erkannten Geste, der Bereich ist 0~240.gesture_w: Die Breite der erkannten Geste, der Bereich ist 0~320.gesture_h: Die Höhe der erkannten Geste, der Bereich ist 0~240.gesture_t: Der Inhalt der erkannten Geste, die Werteliste lautet [„paper“,“scissor“,“rock“].qr_date: Der Inhalt des erkannten QR-Codes.qr_x: Der x-Wert der zentralen Koordinate des zu erkennenden QR-Codes, der Bereich ist 0~320.qr_y: Der y-Wert der zentralen Koordinate des zu erkennenden QR-Codes, der Bereich ist 0~240.qr_w: Die Breite des zu erkennenden QR-Codes, der Bereich ist 0~320.qr_h: Die Höhe des zu erkennenden QR-Codes, der Bereich ist 0~320.