Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Rozpoznawanie twarzy staje się coraz szerzej stosowane, możemy je wykorzystać do wykonania inteligentnego zamka.
Krok 1: Rzeczy użyte w tym projekcie
Komponenty sprzętowe
- Raspberry Pi 3 Model B
- Moduł kamery Raspberry Pi V2
- Gaj - Sztafeta
- LTE Cat 1 Pi HAT (Europa)
- 10.1 calowy wyświetlacz LCD IPS 1200x1980 HDMI
Aplikacje i usługi online
- WinSCP
- Notatnik++
Krok 2: Połączenie sprzętowe
W tym projekcie planujemy robić zdjęcia picamerą i rozpoznawać w nich twarze, a następnie wyświetlać wynik rozpoznawania na ekranie. Jeśli twarze są znane, otwórz drzwi i wyślij, kto otworzył drzwi, na podany numer telefonu przez SMS.
Musisz więc podłączyć kamerę do interfejsu kamery Raspberry Pi i zainstalować antenę i Grove - Relay do kapelusza LTE Pi, a następnie podłączyć HAT do swojego Pi. Ekran można podłączyć do Raspberry Pi za pomocą kabla HDMI, nie zapomnij podłączyć zasilania do ekranu i Pi.
Krok 3: Programowanie oprogramowania
Rozpoznawanie twarzy
Dzięki Adamowi Geitgeyowi i jego projektowi Face Recognition możemy korzystać z najprostszej na świecie biblioteki rozpoznawania twarzy na Raspberry Pi. Poniższe kroki pokażą, jak skonfigurować rozpoznawanie twarzy na Pi.
Krok 1. Użyj raspi-config, aby skonfigurować pamięć kamery i GPU.
sudo raspi-config
Wybierając Opcje interfejsu - Kamera, aby włączyć picamerę, a następnie wybierając Opcje zaawansowane - Podział pamięci, aby ustawić pamięć GPU, należy zmienić ją na 64. Po zakończeniu zrestartuj Raspberry Pi.
Krok 2. Zainstaluj wymagane biblioteki.
aktualizacja sudo apt-get
sudo apt-get upgrade sudo apt-get install build-essential / cmake / gfortran / git / wget / curl / graphicsmagick / libgraphicsmagick1-dev / libatlas-dev / libavcodec-dev / libavformat-dev / libboost-all-dev / libgtk2. 0-dev\libjpeg-dev\liblapack-dev\libswscale-dev\pkg-config\python3-dev\python3-numpy\python3-picamera\python3-pip\zip sudo apt-get clean
Krok 3. Dodać picamerea obsługuje tablicę.
sudo pip3 install --upgrade picamera[tablica]
Krok 4. Zainstaluj dlib i rozpoznawanie twarzy.
sudo pip3 zainstaluj dlib
sudo pip3 zainstaluj face_recognition
Krok 5. Pobierz i uruchom przykład rozpoznawania twarzy
git clone --single-branch
cd./face_recognition/examples python3 facerec_on_raspberry_pi.py
UWAGA: Jeśli masz ImportError: libatlas.so.3: nie można otworzyć udostępnionego pliku obiektu: Brak takiego pliku lub katalogu, uruchom następujące polecenie, aby to naprawić.
Przekaźnik
Gdy rozpoznawanie twarzy jest gotowe, możemy kontynuować dodawanie dodatkowych funkcji. Grove - Relay podłączyliśmy do LTE Cat 1 Pi HAT, ale używa on portu cyfrowego zamiast portu I2C.
To jest wyprowadzenie dla Raspberry Pi 3B, widzimy pin SDA i pin SCL znajdujące się na pinach 3 i pinie 5 płyty.
Możemy więc sterować przekaźnikiem za pomocą wyjścia cyfrowego sygnału do pinu 5. Uruchom następujący program Pythona na swoim Raspberry Pi, jeśli nic nie pójdzie nie tak, usłyszysz Ti-Ta z przekaźnika.
importuj RPi. GPIO jako GPIO
RELAY_PIN = 5 GPIO.setmode(GPIO. BOARD) GPIO.setup(RELAY_PIN, GPIO. OUT) GPIO.output(RELAY_PIN, GPIO. HIGH)
Oto pomysł, ładujemy znane twarze z folderu, rozpoznajemy twarze przechwycone przez picamerę, jeśli twarz znajduje się w folderze, sterujemy przekaźnikiem, aby odblokować drzwi. Możemy je spakować do klasy, oto metoda load_known_faces() i unlock(), gotowy program można pobrać na końcu tego artykułu.
def load_known_faces(self):
znane_twarze = os.listdir(self._known_faces_path) dla znanej_twarzy w znanych_twarzach: self._known_faces_name.append(known_face[0: len(known_face) - len('.jpg')])known_face_image = face_recognition.load_image_file(self._known_faces_) self._known_faces_encoding.append(face_recognition.face_encodings(known_face_image)[0]) return len(self._known_faces_encoding) def unlock(self): if self._matched.count(True) > 0: GPIO.output(self._relay_pin, GPIO. HIGH) print('Drzwi otwarte') time.sleep(5) GPIO.output(self._relay_pin, GPIO. LOW) self._reset_recognise_params() return True self._retry_count += 1 print('Spróbuj ponownie…{ }'.format(self._retry_count)) return False
Myśl transcendentalnie, możemy pokazać obraz, który rozpoznał, biblioteki PIL i matplotlib mogą być pomocne, między innymi matplotlib musi być zainstalowany ręcznie, uruchom to polecenie w terminalu Raspberry Pi.
sudo pip3 zainstaluj matplotlib
Zaimportuj je do swojego kodu i zmień if block w metodzie unlock() w następujący sposób:
img = Image.open('{}/{}.jpg'.format(self._known_faces_path, self._known_faces_name[0]))
plt.imshow(img) plt.ion() GPIO.output(self._relay_pin, GPIO. HIGH) print('Drzwi otwarte') plt.pause(3) plt.close() GPIO.output(self._relay_pin, GPIO. LOW) self._reset_recognise_params() zwraca Prawda
Teraz po rozpoznaniu twarzy na ekranie zostanie wyświetlony obraz z folderu.
SMS
Czasem chcemy wiedzieć kto jest w naszym pokoju, a teraz jest miejsce na LTE Cat 1 Pi HAT. Podłącz do niego kartę SIM i postępuj zgodnie z instrukcjami, aby sprawdzić, czy działa, czy nie.
Krok 1. Włącz UART0 w Raspberry Pi
Użyj nano do edycji pliku config.txt w /boot
sudo nano /boot/config.txt
dodaj dtoverlay=pi3-disable-bt na dole i wyłącz usługę hciuart
sudo systemctl wyłącz hciuart
następnie usuń console=serial0, 115200 w cmdline.txt w /boot
sudo nano /boot/cmdline.txt
Po wykonaniu wszystkich czynności powinieneś ponownie uruchomić Raspberry Pi.
Krok 2. Pobierz przykład i uruchom go.
Otwórz terminal na swoim Raspberry Pi, wpisz do niego te polecenia linia po linii.
cd ~
git clone https://github.com/Seeed-Studio/ublox_lara_r2_pi_hat.git cd ublox_lara_r2_pi_hat sudo python setup.py zainstaluj cd test sudo python test01.py
Jeśli widzisz te wyjścia w swoim terminalu, LTE Cat 1 Pi HAT działa dobrze.
Wykryto 40-pinowy nagłówek GPIO
Włączenie CTS0 i RTS0 na GPIO 16 i 17 rts cts po wybudzeniu… nazwa modułu: LARA-R211 RSSI: 3
Teraz wiedzieliśmy, że HAT działa dobrze, jak używać go do wysyłania SMS-ów? Pierwszą rzeczą, którą musisz wiedzieć, jest to, że Raspberry Pi komunikuje się z HAT poprzez wysyłanie poleceń AT przez UART. Możesz wysyłać polecenia AT do LTE HAT, uruchamiając ten kod w pythonie
z importu ublox_lara_r2 *
u = Ublox_lara_r2() u.initialize() u.reset_power() # Zamknij komunikat debugowania u.debug = False u.sendAT('')
Polecenie AT do wysyłania SMS-ów wygląda następująco
AT+CMGF=1
AT+CMGS=
więc oto metoda _send_sms():
def _send_sms(self):
if self._phonenum == None: zwróć False dla odblokowania w self._recognise_face_names(): if self._ublox.sendAT('AT+CMGF=1\r\n'): print(self._ublox.response) if self. _ublox.sendAT('AT+CMGS="{}"\r\n'.format(self._phonenum)): print(self._ublox.response) jeśli self._ublox.sendAT('{} wchodzi do pokoju.\ x1a'.format(unlocker)): print(self._ublox.response)
UWAGA: Biblioteka LTE Cat 1 Pi HAT napisana przez python2, która nie jest zbyt kompatybilna z python3, jeśli chcesz jej używać z rozpoznawaniem twarzy, pobierz ją z linku na końcu tego artykułu.