如何利用draw.text显示实时时间
时间: 2024-05-15 15:14:25 浏览: 93
你可以使用Python的datetime模块获取当前时间,然后使用Pillow库中的ImageDraw模块的text()函数将其显示在图像上。下面是一个示例代码:
```python
from datetime import datetime
from PIL import Image, ImageDraw, ImageFont
# 创建一个空白图像
img = Image.new('RGB', (500, 500), color = 'white')
# 创建一个ImageDraw对象
draw = ImageDraw.Draw(img)
# 获取当前时间
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
# 设置字体
font = ImageFont.truetype("arial.ttf", 36)
# 在图像上绘制时间
draw.text((200, 200), current_time, font=font, fill=(0, 0, 0))
# 显示图像
img.show()
```
这个脚本会创建一个500x500的白色图像,并将当前时间显示在其中心位置。你可以将其保存为一个.py文件并运行它来查看效果。
相关问题
这段 import cv2 import face_recognition import numpy as np from PIL import Image, ImageDraw,ImageFont video_capture = cv2.VideoCapture(r'C:/Users/ALIENWARE/123.mp4')#如果输入是(0)为摄像头输入 #现输入为MP4进行识别检测人脸 first_image = face_recognition.load_image_file("1.jpg") first_face_encoding = face_recognition.face_encodings(first_image)[0] Second_image = face_recognition.load_image_file("2.jpg") Second_face_encoding = face_recognition.face_encodings(Second_image)[0] third_image = face_recognition.load_image_file("3.jpg") third_face_encoding = face_recognition.face_encodings(third_image)[0] inside_face_encodings = [first_face_encoding,Second_face_encoding,third_face_encoding] inside_face_names = ['A','B','C'] face_locations = [] face_encodings = [] face_names = [] process_this_frame = True while True: ret, frame = video_capture.read() small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) rgb_small_frame = small_frame[:, :, ::-1] if process_this_frame: face_locations = face_recognition.face_locations(rgb_small_frame) face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) face_names = [] for face_encoding in face_encodings: matches = face_recognition.compare_faces(inside_face_encodings, face_encoding) name = '未录入人脸' if True in matches: first_match_index = matches.index(True) name = inside_face_names[first_match_index] face_names.append(name) process_this_frame = not process_this_frame for (top, right, bottom, left), name in zip(face_locations, face_names): top *= 4 right *= 4 bottom *= 4 left *= 4 cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) img_pil = Image.fromarray(frame) draw = ImageDraw.Draw(img_pil) fontStyle = ImageFont.truetype("C:/Windows/Fonts/simsun.ttc", 32, encoding="utf-8") draw.text((left + 6, bottom - 6), name, (0, 200, 0), font=fontStyle) frame = np.asarray(np.array(img_pil)) cv2.imshow('face_out', frame) if cv2.waitKey(1) & 0xFF == ord('q'): #退出需要按下Q键否则内核会崩溃 break video_capture.release() cv2.destroyAllWindows()
好的,这段代码可以进行人脸识别并在视频中标出人脸,并在人脸旁边显示人名。如果你想要修改代码实现更大的差距,可以考虑以下几种方案:
1. 优化人脸识别算法,提高识别准确率;
2. 修改人脸识别模型,训练更加精准的模型;
3. 修改代码实现更加灵活的功能,比如增加人脸识别记录功能、记录人脸进出时间等;
4. 将代码移植到其他平台,比如移植到树莓派等嵌入式设备上。
具体实现方法需要根据你的需求和应用场景来定。如果你有具体的问题或需求,可以随时向我提出。
请用python,pyside6写一个UI界面代码,具有如下功能:1.一个widget主窗口,包含5个子窗口;2.一个窗口显示mlx90640动态色温图;3.一个窗口显示最大温度随时间的变化曲线图;4.一个窗口显示usb摄像头的动态画面;5.一个窗口显示图像中物体大小与时间的变化曲线图;6.一个窗口显示程序运行过程中的的print信息
以下是一个简单的示例代码,实现了上述要求的功能:
```python
from PySide6.QtWidgets import QApplication, QMainWindow, QGridLayout, QWidget, QLabel
from PySide6.QtGui import QImage, QPixmap
from PySide6.QtCore import Qt, QTimer
import cv2
import matplotlib.pyplot as plt
import numpy as np
class MainWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 定义5个子窗口
self.widget1 = TemperatureMap()
self.widget2 = TemperatureCurve()
self.widget3 = Camera()
self.widget4 = ObjectSize()
self.widget5 = Console()
# 将5个子窗口加入到主窗口中
layout = QGridLayout()
layout.addWidget(self.widget1, 0, 0)
layout.addWidget(self.widget2, 0, 1)
layout.addWidget(self.widget3, 1, 0)
layout.addWidget(self.widget4, 1, 1)
layout.addWidget(self.widget5, 2, 0, 1, 2)
self.setLayout(layout)
class TemperatureMap(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 显示图像的label
self.label = QLabel(self)
self.label.setAlignment(Qt.AlignCenter)
self.label.setMinimumSize(640, 480)
self.label.setMaximumSize(640, 480)
# 定时器,每隔一段时间更新一次图像
self.timer = QTimer(self)
self.timer.setInterval(1000)
self.timer.timeout.connect(self.updateImage)
self.timer.start()
def updateImage(self):
# 生成随机温度值,用于模拟 mlx90640 的数据
temperature = np.random.rand(24, 32) * 50
# 将温度值转换为伪彩色图像
cmap = plt.get_cmap('jet')
rgba = cmap(temperature / 50.0)
image = (rgba[:, :, :3] * 255).astype(np.uint8)
# 将图像转换为 QImage,并显示在 label 中
qimage = QImage(image.data, image.shape[1], image.shape[0],
image.shape[1] * 3, QImage.Format_RGB888)
pixmap = QPixmap(qimage)
self.label.setPixmap(pixmap)
class TemperatureCurve(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 生成随机温度值,用于模拟最大温度的变化
self.temperatures = np.random.rand(60) * 50
# 绘制温度曲线图
self.figure, self.ax = plt.subplots()
self.ax.plot(self.temperatures)
self.ax.set_ylim([0, 50])
self.ax.set_xlabel('time')
self.ax.set_ylabel('temperature')
self.ax.set_title('Max Temperature Curve')
self.canvas = FigureCanvas(self.figure)
self.canvas.setMinimumSize(640, 480)
self.canvas.setMaximumSize(640, 480)
# 定时器,每隔一段时间更新一次曲线
self.timer = QTimer(self)
self.timer.setInterval(1000)
self.timer.timeout.connect(self.updateCurve)
self.timer.start()
def updateCurve(self):
# 生成随机温度值,并加入到曲线中
temperature = np.random.rand() * 50
self.temperatures = np.concatenate((self.temperatures[1:], [temperature]))
# 更新曲线
self.ax.clear()
self.ax.plot(self.temperatures)
self.ax.set_ylim([0, 50])
self.ax.set_xlabel('time')
self.ax.set_ylabel('temperature')
self.ax.set_title('Max Temperature Curve')
self.canvas.draw()
class Camera(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 显示图像的label
self.label = QLabel(self)
self.label.setAlignment(Qt.AlignCenter)
self.label.setMinimumSize(640, 480)
self.label.setMaximumSize(640, 480)
# 打开摄像头
self.cap = cv2.VideoCapture(0)
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
# 定时器,每隔一段时间更新一次图像
self.timer = QTimer(self)
self.timer.setInterval(1000 // 30)
self.timer.timeout.connect(self.updateImage)
self.timer.start()
def updateImage(self):
# 读取摄像头图像
ret, frame = self.cap.read()
# 将图像转换为 QImage,并显示在 label 中
if ret:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
qimage = QImage(frame.data, frame.shape[1], frame.shape[0],
frame.shape[1] * 3, QImage.Format_RGB888)
pixmap = QPixmap(qimage)
self.label.setPixmap(pixmap)
class ObjectSize(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 生成随机物体大小值,用于模拟物体大小的变化
self.sizes = np.random.randint(1, 100, size=60)
# 绘制物体大小曲线图
self.figure, self.ax = plt.subplots()
self.ax.plot(self.sizes)
self.ax.set_ylim([0, 100])
self.ax.set_xlabel('time')
self.ax.set_ylabel('object size')
self.ax.set_title('Object Size Curve')
self.canvas = FigureCanvas(self.figure)
self.canvas.setMinimumSize(640, 480)
self.canvas.setMaximumSize(640, 480)
# 定时器,每隔一段时间更新一次曲线
self.timer = QTimer(self)
self.timer.setInterval(1000)
self.timer.timeout.connect(self.updateCurve)
self.timer.start()
def updateCurve(self):
# 生成随机物体大小值,并加入到曲线中
size = np.random.randint(1, 100)
self.sizes = np.concatenate((self.sizes[1:], [size]))
# 更新曲线
self.ax.clear()
self.ax.plot(self.sizes)
self.ax.set_ylim([0, 100])
self.ax.set_xlabel('time')
self.ax.set_ylabel('object size')
self.ax.set_title('Object Size Curve')
self.canvas.draw()
class Console(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 显示print信息的label
self.label = QLabel(self)
self.label.setAlignment(Qt.AlignTop)
self.label.setMinimumSize(640, 480)
self.label.setMaximumSize(640, 480)
def print(self, text):
# 将print信息显示在label中
self.label.setText(self.label.text() + text + '\n')
if __name__ == '__main__':
app = QApplication([])
window = QMainWindow()
main_widget = MainWidget()
window.setCentralWidget(main_widget)
window.show()
app.exec_()
```
在上述代码中,我们使用了 PySide6 模块来创建 UI 界面,使用了 matplotlib 模块来绘制曲线图。具体实现如下:
- TemperatureMap 类:用于显示 mlx90640 动态色温图。使用 QTimer 定时器每隔一段时间更新一次图像。先生成随机温度值,然后将温度值转换为伪彩色图像,并将图像显示在 QLabel 中。
- TemperatureCurve 类:用于显示最大温度随时间的变化曲线图。使用 QTimer 定时器每隔一段时间更新一次曲线。先生成随机温度值,然后将温度值加入到曲线中,更新曲线。
- Camera 类:用于显示 usb 摄像头的动态画面。使用 QTimer 定时器每隔一段时间更新一次图像。打开摄像头,读取摄像头图像,并将图像显示在 QLabel 中。
- ObjectSize 类:用于显示图像中物体大小与时间的变化曲线图。使用 QTimer 定时器每隔一段时间更新一次曲线。先生成随机物体大小值,然后将物体大小加入到曲线中,更新曲线。
- Console 类:用于显示程序运行过程中的 print 信息。在 print 函数中将信息显示在 QLabel 中。
- MainWidget 类:用于创建主窗口和子窗口。使用 QGridLayout 布局将 5 个子窗口加入到主窗口中。
在程序运行时,创建 QApplication 和 QMainWindow 对象,然后将 MainWidget 设置为 QMainWindow 的中央窗口,并显示出来。最后调用 app.exec_() 进入主循环,等待事件的发生。
阅读全文