import cv2 import socket import numpy as np import struct import sqlite3 from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding from cryptography.hazmat.backends import default_backend key = b'0123456789abcdef0123456789abcdef' iv = b'0123456789abcdef' # 连接到数据库 conn = sqlite3.connect('video.db') cursor = conn.cursor() # 创建videos表 cursor.execute("CREATE TABLE IF NOT EXISTS videos (id INTEGER PRIMARY KEY, path TEXT)") path = 'M:/img/xinxixitong.avi' fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter(path, fourcc, 30, (640, 480)) # 解密函数 def dt_f(ciphertext, key, iv): # 创建 AES 解密器 dt = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()).decryptor() # 解密图像 padded_data = dt.update(ciphertext) + dt.finalize() # 移除填充 unpadder = padding.PKCS7(128).unpadder() unpadded_data = unpadder.update(padded_data) + unpadder.finalize() return unpadded_data # 服务端IP和端口号 HOST = '0.0.0.0' # 任意IP地址 PORT = 6666 # 创建套接字对象 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sk: sk.bind((HOST, PORT)) sk.listen(5) print('等待连接...') # 接受连接请求 client_conn, addr = sk.accept() with client_conn: print('与', addr,'相连接') data_buffer = b'' # 缓存数据 while True: data = client_conn.recv(6) #如果没有数据传输则停止 if not data: break size = struct.unpack('!I', data)[0] # 接收到的帧数据 data = b'' while len(data) < size: packet = client_conn.recv(size - len(data)) if not packet: break data += packet # 解密帧 dted_f = dt_f(data, key, iv) # data_buffer += dt_f # 添加到缓存中 # 将解密后的 bytes 数据转换为图像帧 dted_f = np.frombuffer(dted_f, dtype=np.uint8).reshape(480, 640, 3) # 显示解密后的帧 cv2.imshow("2021218000_dted_Server", dted_f) out.write(dted_f) if cv2.waitKey(1) in [ord('q'),27]: out.release() break cursor.execute('INSERT INTO videos (path) VALUES (?)', (path,)) conn.commit() conn.close() cv2.destroyAllWindows()
时间: 2024-02-14 19:22:24 浏览: 23
这段代码是一个 Python 代码,看起来是一个视频传输的服务端程序,使用了 OpenCV 库处理图像数据,使用了 socket 库进行网络传输,使用了 cryptography 库进行 AES 解密。程序将接收到的加密帧解密后显示出来,并将解密后的帧写入本地文件,最后将文件路径保存到 SQLite 数据库中。
相关问题
from .face_struct import * import cv2 import numpy as np import base64 import os
这段代码是导入了一些需要用到的库和自定义的人脸结构体。其中:
- `cv2` 是 OpenCV 库,用于图像处理;
- `numpy` 是 Python 数值计算的基础库,用于数组运算等;
- `base64` 是用于将二进制数据编码成 ASCII 字符的库;
- `os` 是 Python 的标准库,用于操作文件和目录。
具体的实现需要看后续代码。
import imutils import time import cv2 import numpy as np from kalman import * import matplotlib.pyplot as plt
您好!您的代码看起来是在使用Python编写一个计算机视觉相关的程序。根据您的代码,您可能需要安装一些额外的库来运行它。在Ubuntu上进行Python编程,可以按照以下步骤安装和配置所需的库:
1. 安装pip:打开终端,输入以下命令安装pip(Python包管理工具):
```
sudo apt-get install python-pip
```
2. 安装所需的库:根据您的代码,您可能需要安装以下库:imutils、OpenCV、numpy和matplotlib。
```
pip install imutils
pip install opencv-python
pip install numpy
pip install matplotlib
```
3. 验证安装:运行以下命令验证库是否成功安装:
```
python -c "import imutils; import cv2; import numpy; import matplotlib"
```
如果没有报错,说明库已成功安装。
请注意,这只是安装所需库的基本步骤。根据您的具体环境和需求,可能需要进行其他配置或安装其他依赖项。希望这可以帮助您在Ubuntu上进行Python编程!