PIL图像处理
一个图像处理模组,在opencv无法使用中文时,可以切换至PIL来转换中文
(下附opencv插入中文函数)
基础操作
引入模组后
使用Image.open导入图片:
import PIL
from PIL import Image, ImageFilter, ImageFont, ImageDraw
img = Image.open("img/1.jpg")
img.show()
此为opencv插入中文函数,使用draw创建画布、truetype设置字体等参数、text进行绘制
再通过 cv2.cvtColor(opencv中的函数)转换PIL_opencv的格式
def opencv_draw_text(text, x, y, img):
# 写文字方式,把图像转成PIL,写完文字再转回来
# 先转换颜色码
cv2img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pilimg = Image.fromarray(cv2img)
# 在pil中打印中文
draw = ImageDraw.Draw(pilimg) # 创建画布
font = ImageFont.truetype("simhei.ttf", 25, encoding="utf-8")
draw.text((x, y), text, (255, 255, 255), font=font)
# 再从PIL转回cv2
cv2charimg = cv2.cvtColor(np.array(pilimg), cv2.COLOR_RGB2BGR)
return cv2charimg
OpenCV视频处理
使用opencv对图片、摄像头视频等进行操作
在图片/上画图,画框,写字等操作
注意:opencv的宽高(wh),色彩(R G B)和常规的写法都是相反的!是(h w)和(B G R)
OpenCv门禁系统的操作步骤
①记录(拍照)、
②训练(使用opencv增强包中的自动训练)、
③识别(传入+识别)
备忘:代码在D:\AI学习\PycharmProjects_Week4\Day15_opencv\face_self中
flask本地web服务器
flask模组,一个可以用Python搭建web服务器的模组
可以实现表单数值传递、文件传输、cookie/ session操作等
cookie/ session的区别
cookie会一直保存在本地较长的时间、
而session会在[服务器-用户]停止交互一段时间之后自动删除
高数基础与“梯度下降”
高数基础:
函数的饱和性:应变量(y)有无范围
AI的概念中:
梯度=斜率=导数
(仅仅便于理解)
导数 偏导数 梯度视频:
https://www.bilibili.com/video/BV1i54y1B7Tk
神经网络的最小神经元:w*X + b (w,b就是他的权重)
深度学习要做到的就是:有标准(满分)的监督学习
这一点靠loss损失来控制
一个使用"梯度下降"和loss(损失)控制实现的,计算拟合回归曲线的案例
import random
import matplotlib.pyplot as plt
# 梯度下降法,求解: 求loss最小时、w的输出
_x = [i / 100 for i in range(100)] # 0.1 -- 0.99的列表
# 线性回归到 w=3 b=10
_y = [3 * e + 10 + random.random() for e in _x] # e来自列表_x,此列表表示
w = random.random()
b = random.random()
#绘制散点图
plt.scatter(_x, _y)
#显示
plt.savefig("4.jpg")
print(_x)
print(_y)
print(w)
print(b)
plt.ion() # 开始动画
for i in range(100):
for x,y in zip(_x, _y):
# xW+B=h W、B:权重
# loss=(y-h)**2 loss:损失
z = x * w + b
loss = (z - y) ** 2
# 对w,b求导数,而且是复合函数求导
# 梯度下降法,加 - 号
dw = -2*(z-y)*x # 就是导数,希望w往这个方向下降
db = -2*(z-y)
w = w + 0.01 * dw # 一条以新的导数(斜率)算出来的
b = b + 0.01 * db
print(loss)
print(w, b)
plt.cla() # 清屏
plt.plot(_x, _y, ".")
v = [w * e + b for e in _x]
plt.plot(_x, v)
plt.pause(0.01)
plt.ioff()
plt.show()