Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИНАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Інститут ІКНІКафедра АСУ
ЗВІТ
До лабораторної роботи № 2На тему: «Перехоплення програмою управління відеопотоком з відеокамери»З дисципліни: «Методи і засоби комп’ютерних інформаційних технологій»
Львів – 2018
Хід роботи
Код програми:
import PIL.Image
import numpy as np
import cv2
import os
from tkinter import *
import time
def FileWrite(value, id ): # функція для запису і перетворення числа
f = open(str(id) + ".txt", "a") # відкриття файлу і добавлення нових записів в кінець
f.write("\n")
f.write("{0:08b}".format(value)) # форматування зовнішнього вигляду і запис
def ImgToBin(id): # функція для перетворення зображення у бінарний код
fp = open( "imgs/" + str(id) + ".png", "rb") # відкрити файл у бінарному вигляді для читання
img = PIL.Image.open(fp) # створити об'єкт типу image і повернути дескриптор
pixel = img.load() # перетворення і запис файлу у пам"ять
i = 0
stime = time.time() # отримати час на даний момент
while i < img.size[0]: # цикл для обходу всіх рядків
j = 0
while j < img.size[1]: # цикл для обходу всіх стовпців
FileWrite(pixel[i, j][0], id) # запис кольору у файл у бінарному вигляді
FileWrite(pixel[i, j][1], id)
FileWrite(pixel[i, j][2], id)
j += 1
if(j > 10):
break
i += 1
if(i > 5):
break
print(" s ", time.time() - stime) # вивести час затрачений на виконання функції
def all(event):
camid = (int)(camIdGet.get()) # отримати ідентифікатор камери із поля для вводу
period = (int)(shotCounter.get()) # отримати період для запису
deltaTime = (float)(setTime.get()) # отримати час на виконання
tmp = period
i = 0
captured = 0
cap = cv2.VideoCapture(camid) # створення об'єкту типу VideoCapture
stime = time.time()
while abs(stime - time.time()) < deltaTime: # цикл виконуватиметься поки час виконання не буде більший за заданий
ret, frame = cap.read() # зчитування зображення
cv2.imshow('frame', frame) # показати зображення у окремому вікні
cv2.waitKey(1) # пауза
if (i == period ):
cv2.imwrite(os.path.join("imgs", '%d.png') % captured, frame) # записати зображення як файл у форматі png
captured += 1
period += tmp
i += 1
cap.release() # видалити обєкт
cv2.destroyAllWindows() # закрити всі вікна
while captured != 0:
ImgToBin(captured - 1) # перетворення зображень у бінарний код
captured -= 1
root = Tk() # базове вікно
l = Label(bg='black', fg='white', width=40, text = "cam id:") # мітка для виводу інформації
camIdGet = Entry(width=20) # поле для зчитування
L1 = Label(bg='black', fg='white', width=40, text = "Photo counter(every n):")
shotCounter = Entry(width=20)
L2 = Label(bg='black', fg='white', width=40, text = "End time(in seconds):")
setTime = Entry(width=20)
b = Button(text = " start ") # кнопка
b.bind('<Button-1>', all) # привязування функіції до кнопки
l.pack() #розміщення елементів на головному вікні послідовно
camIdGet.pack()
L1.pack()
shotCounter.pack()
L2.pack()
setTime.pack()
b.pack()
root.mainloop() # створити головний цикл
#set cam id; shot counter; time of capture
Результат роботи програми:
/
11010001
10110100
10010100
11001111
10110100
10011100
11001110
10110010
10100110
11001100
10101111
10101000
11011010
11000000
10110100
…
Висновок
При виконанні лабораторної роботи було розроблено програму для перехоплення управління відео потоком із камери і запису заздалегідь визначених кадрів у двійковому коді.