Бұл нұсқаулықта Python көмегімен жұмыс істейтін ақылды камера жасаймыз: OpenCV веб-камерадан кадр алады, қозғалысты анықтайды, QR-кодты оқиды және оқиға суретін сақтайды. Соңында RTSP камерасы мен YOLO моделін қосу жолын көрсетеміз.
2026 жылғы 22 маусымдағы жағдай бойынша өзекті. Командалар opencv-python PyPI парағымен және OpenCV-дің видео, фонды алып тастау, QRCodeDetector құжаттамаларымен тексерілді. Мақала күніндегі тұрақты PyPI пакеті — 4.13.0.92.
Нәтижесінде не аласыз
- камераның тірі кескіні және FPS;
- ірі қозғалыс аймақтарының қоршаулары;
- бұлтсыз QR-код оқу;
eventsбумасына бес секундта бір реттен жиі емес сақталатын кадрлар;- IP-камера мен YOLO қосуға дайын негіз.

1-қадам. Жоба мен виртуалды орта жасаңыз
macOS және Linux:
mkdir opencv-smart-camera
cd opencv-smart-camera
python3 -m venv .venv
source .venv/bin/activateWindows 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, ал 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.pyMIN_AREA— ұсақ көлеңкелерге реакцияны азайтады;COOLDOWN— сақтаулар арасындағы үзіліс;Q— камераны дұрыс босатып, бағдарламаны жабады.

6-қадам. Видео немесе RTSP қосыңыз
SOURCE = "video.mp4"
# немесе
SOURCE = "rtsp://USER:PASSWORD@CAMERA_IP:554/STREAM_PATH"Нақты құпиясөзді Git-ке немесе скриншотқа қоспаңыз. Камераны жергілікті желімен шектеп, RTSP портын интернетке тікелей ашпаңыз.
7-қадам. YOLO26 моделін қосыңыз
python -m pip install ultralyticsfrom 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-ны бір-бірден қосыңыз.
Мұқаба генеративті модельмен жасалды. Сызбаларда нақты камера мекенжайлары, тіркелгі деректері немесе жеке ақпарат жоқ.

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