Жасанды интеллект

Python-ға OpenCV орнатып, ақылды камера жасау

Python-ға OpenCV орнату және ақылды камера жасау: веб-камера, қозғалыс, QR-кодтар, оқиғаларды сақтау, RTSP және YOLO.

Автор admin
2 минут оқу

Бұл нұсқаулықта Python көмегімен жұмыс істейтін ақылды камера жасаймыз: OpenCV веб-камерадан кадр алады, қозғалысты анықтайды, QR-кодты оқиды және оқиға суретін сақтайды. Соңында RTSP камерасы мен YOLO моделін қосу жолын көрсетеміз.

2026 жылғы 22 маусымдағы жағдай бойынша өзекті. Командалар opencv-python PyPI парағымен және OpenCV-дің видео, фонды алып тастау, QRCodeDetector құжаттамаларымен тексерілді. Мақала күніндегі тұрақты PyPI пакеті — 4.13.0.92.

Нәтижесінде не аласыз

  • камераның тірі кескіні және FPS;
  • ірі қозғалыс аймақтарының қоршаулары;
  • бұлтсыз QR-код оқу;
  • events бумасына бес секундта бір реттен жиі емес сақталатын кадрлар;
  • IP-камера мен YOLO қосуға дайын негіз.
OpenCV негізіндегі ақылды камераның жұмыс сызбасы
Кадр алынады, қозғалыс пен QR өңделеді, содан кейін оқиғаны сақтау туралы шешім қабылданады.

1-қадам. Жоба мен виртуалды орта жасаңыз

macOS және Linux:

mkdir opencv-smart-camera
cd opencv-smart-camera
python3 -m venv .venv
source .venv/bin/activate

Windows PowerShell:

mkdir opencv-smart-camera
cd opencv-smart-camera
py -m venv .venv
.venv\Scripts\Activate.ps1

2-қадам. OpenCV орнатыңыз

python -m pip install --upgrade pip
python -m pip install opencv-python
python -c "import cv2; print(cv2.__version__)"

Бір ортаға OpenCV пакетінің біреуін ғана орнатыңыз. Терезесіз серверге opencv-python-headless, қосымша модульдер қажет болса opencv-contrib-python қолданылады.

OpenCV-ді бөлек Python ортасына орнату командалары
PyPI пакетінің атауы — opencv-python, ал Python импорты — cv2.

3-қадам. Камераны тексеріңіз

import cv2
camera = cv2.VideoCapture(0)
if not camera.isOpened():
    raise SystemExit("Cannot open camera")
while True:
    ok, frame = camera.read()
    if not ok: break
    cv2.imshow("Camera test", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"): break
camera.release()
cv2.destroyAllWindows()

Файлды camera_test.py деп сақтап, python camera_test.py орындаңыз. Камера ашылмаса, Zoom секілді қолданбаларды жауып, жүйелік рұқсатты және 1 индексін тексеріңіз.

4-қадам. Қозғалыс пен QR-кодты қосыңыз

MOG2 қозғалмайтын фон моделін құрады. 200-ден төмен маска мәндері көлеңке ретінде алынып тасталады, морфологиялық сүзгі ұсақ шуды тазартады, ал MIN_AREA тым кішкентай контурларды өткізбейді.

from datetime import datetime
from pathlib import Path
import time
import cv2
import numpy as np

SOURCE, MIN_AREA, COOLDOWN = 0, 2500, 5.0
out = Path("events"); out.mkdir(exist_ok=True)
camera = cv2.VideoCapture(SOURCE)
if not camera.isOpened(): raise SystemExit("Cannot open camera")
model = cv2.createBackgroundSubtractorMOG2(500, 36, True)
qr = cv2.QRCodeDetector()
kernel = np.ones((3, 3), np.uint8)
last_saved = 0.0

try:
    while True:
        ok, frame = camera.read()
        if not ok: break
        mask = model.apply(frame)
        _, mask = cv2.threshold(mask, 200, 255, cv2.THRESH_BINARY)
        mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=2)
        mask = cv2.dilate(mask, kernel, iterations=2)
        motion = False
        contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL,
                                       cv2.CHAIN_APPROX_SIMPLE)
        for contour in contours:
            if cv2.contourArea(contour) < MIN_AREA: continue
            x, y, w, h = cv2.boundingRect(contour)
            cv2.rectangle(frame, (x, y), (x+w, y+h), (0,220,180), 2)
            motion = True
        text, points, _ = qr.detectAndDecode(frame)
        if text and points is not None:
            pts = points.astype(int).reshape(-1, 2)
            cv2.polylines(frame, [pts], True, (0,210,255), 3)
            cv2.putText(frame, f"QR: {text[:40]}", (20,70),
                        cv2.FONT_HERSHEY_SIMPLEX, .7, (0,210,255), 2)
        now = time.monotonic()
        if motion and now-last_saved >= COOLDOWN:
            name = datetime.now().strftime("event_%Y%m%d_%H%M%S.jpg")
            cv2.imwrite(str(out/name), frame); last_saved = now
        cv2.imshow("OpenCV smart camera", frame)
        if cv2.waitKey(1) & 0xFF == ord("q"): break
finally:
    camera.release(); cv2.destroyAllWindows()

5-қадам. Іске қосып, сезімталдықты реттеңіз

python smart_camera.py
  • MIN_AREA — ұсақ көлеңкелерге реакцияны азайтады;
  • COOLDOWN — сақтаулар арасындағы үзіліс;
  • Q — камераны дұрыс босатып, бағдарламаны жабады.
Осы тақырыпта:  Тарихи меже: боттар алғаш рет веб-трафик көлемі бойынша адамдардан асып түсті
OpenCV ақылды камерасының демонстрациялық экраны
Қозғалыс қоршауы, QR-код және оқиғалар көрсетілген демонстрациялық нәтиже.

6-қадам. Видео немесе RTSP қосыңыз

SOURCE = "video.mp4"
# немесе
SOURCE = "rtsp://USER:PASSWORD@CAMERA_IP:554/STREAM_PATH"

Нақты құпиясөзді Git-ке немесе скриншотқа қоспаңыз. Камераны жергілікті желімен шектеп, RTSP портын интернетке тікелей ашпаңыз.

7-қадам. YOLO26 моделін қосыңыз

python -m pip install ultralytics
from ultralytics import YOLO
model = YOLO("best.pt")
results = model.predict(frame, conf=0.35, verbose=False)
frame = results[0].plot()

Жүктемені азайту үшін нейрондық желіні әр екінші немесе үшінші кадрда іске қосыңыз. Модельді оқыту YOLO26 нұсқаулығында берілген.

Жиі кездесетін қателер

  • Камера ашылмайды: ОС рұқсатын, индексті және камераны иеленген қолданбаларды тексеріңіз.
  • Серверде терезе жоқ: headless пакетінде imshow қолданылмайды.
  • Оқиға тым көп: MIN_AREA және COOLDOWN мәндерін арттырыңыз.
  • QR оқылмайды: жарықты жақсартып, шағылысты азайтыңыз.

Қорытынды

OpenCV көмегімен бұлтсыз пайдалы прототип жасауға болады: видеоны оқу, қозғалысты бөліп алу, QR-кодты тану және оқиғаны сақтау. Алдымен веб-камераны тұрақтандырып, кейін RTSP пен YOLO-ны бір-бірден қосыңыз.

Мұқаба генеративті модельмен жасалды. Сызбаларда нақты камера мекенжайлары, тіркелгі деректері немесе жеке ақпарат жоқ.

Мақалаға пікірлер

Leave a Comment

Сіздің email мекенжайыңыз жарияланбайды. Міндетті өрістер * белгісімен белгіленген

Жоғарыға жылжытыңыз