Python környezet és a program függőségeinek telepítése

Ez a dokumentum a Rubik Pi + Basler kamera alapú image classification projekt Python környezetének beállítását és függőségeinek telepítését ismerteti, 3.11-es Python forrásból fordítva és virtuális környezetben.


1. Python 3.11 fordítása forrásból

sudo apt update
sudo apt install -y build-essential libssl-dev zlib1g-dev \
  libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
  libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev git

cd /usr/src
sudo wget https://www.python.org/ftp/python/3.11.8/Python-3.11.8.tgz
sudo tar xvf Python-3.11.8.tgz
cd Python-3.11.8
sudo ./configure --enable-optimizations
sudo make -j$(nproc)
sudo make altinstall

2. Virtuális környezet létrehozása

cd /home/pi/your_project_directory
python3.11 -m venv venv
source venv/bin/activate

3. Pip frissítése

pip install --upgrade pip

4. Függőségek telepítése

pip install flask flask-cors opencv-python numpy tensorflow==2.15.0 pypylon spidev sysv_ipc requests

Megjegyzés:

  • A pypylon telepítése előtt a Basler SDK-nak is telepítve kell lennie a rendszerre (pylon SDK).
  • A TensorFlow verziója (itt: 2.15.0) összhangban kell legyen a CPU architektúrával (pl. ARMv8 esetén csak bizonyos build-ek működnek).

5. SQLite (bent van a standard lib-ben, nem kell külön telepíteni)

6. Gpio és egyéb rendszer függőségek

GPIO-vezérléshez, ha a gpio_output GPIO libet használ:

  • pl. ha RPi.GPIO vagy gpiozero használva van:
pip install RPi.GPIO gpiozero

7. Naplózás

A logging modul beépített Python standard lib, nem igényel külön telepítést.


8. Projektfájlok

Az alábbi forrásfájlok importált moduljai alapján az összes szükséges csomag a fentiek között megtalálható:

  • camera_server.py
  • cvr_backend.py
  • input.py
  • output.py

9. Indítás

A rendszer indításához lépj be a projekt gyökérkönyvtárába, aktiváld a virtuális környezetet, majd futtasd a szervert:

source venv/bin/activate
systemctl start camera_server.py - ha a camera.service fájl a helyén van.

10. Hostapd telepítése és beállítása

Statikus IP-cím: 192.168.4.1

A /etc/dhcpcd.conf fájlban a következő sorokat kell elhelyezni:

interface wlan0
    static ip_address=192.168.4.1/24
    nohook wpa_supplicant

interface wlan1
    nohook wpa_supplicant

A hostapd csomag telepítése:

sudo apt install hostapd

Engedélyezés és elindítás:

sudo systemctl unmask hostapd
sudo systemctl enable hostapd

A hostapd.conf fájl például így nézhet ki:

interface=wlan0
driver=nl80211
ssid=RubikPiAP
hw_mode=g
channel=7
wmm_enabled=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=erostitokod
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

Az /etc/default/hostapd fájlban adjuk meg a konfigurációs fájl elérési útját:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

DHCP szerver telepítése (ha szükséges):

sudo apt install dnsmasq

Példa dnsmasq.conf részlet:

interface=wlan0
  dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h

10. Webszerver beállítása (Apache + Flask reverse proxy)

A rendszer frontendje (pl. Vue/React) a /var/www/cvr-ui-rest/dist mappában helyezkedik el, míg a Flask-alapú API kiszolgálás a http://127.0.0.1:5000 címen történik. Ehhez egy Apache virtual host konfiguráció szükséges, amely a frontend statikus fájljait szolgálja ki, és továbbítja az /api/ végződésű kéréseket a Flask backend felé.

Apache virtual host konfiguráció

Hozz létre egy konfigurációs fájlt:

sudo nano /etc/apache2/sites-available/rubikpi.conf

Tartalma:

apacheMásolásSzerkesztés<VirtualHost *:80>
    ServerName rubikpi.local
    DocumentRoot /var/www/cvr-ui-rest/dist

    <Directory /var/www/cvr-ui-rest/dist>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ProxyPreserveHost On
    ProxyPass /api/ http://127.0.0.1:5000/api/
    ProxyPassReverse /api/ http://127.0.0.1:5000/api/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Engedélyezés és újraindítás

sudo a2enmod proxy proxy_http
sudo a2ensite rubikpi.conf
sudo systemctl restart apache2

Hostnév helyi feloldása

Ha nincs DNS, a rubikpi.local névhez adj hozzá bejegyzést a klienseken vagy lokálisan:

sudo nano /etc/hosts

Példa:

192.168.4.1 rubikpi.local
en_USEnglish