
前段时间在积分商城耗费巨资兑换了ESP32CAM,这几天有空,上手用了下,还不错。
今天把我用它【自动定时拍照然后制作延时视频】的过程分享给大家,摄像头画质感人,我技术水平有限,请多指教。
先上成果,拍了1030张图片合成的:

工具材料
- ESP32CAM 2. USB 转 TTL 3. 杜邦线 4. thonny 5. SD卡
步骤
- 把SD卡插入ESP32CAM,参考下图接线,建议用5V,特别注意要把GND和IO0 接通:
2.下载&安装Thonny ,下载地址:https://thonny.org/
3.下载micropython 固件 ,我已经打包在附件里了。
3.把USB转TTL 连接电脑,打开Thonny,进行固件烧录。
在弹出的框中点击下图所示位置
会再次弹出1个框
依次选择好 端口,固件 ,点击安装即可。当出现“Done”时表示完成,关闭窗口即可,此时,已经将MicroPython烧录好了。
4. 拔出USB转TTL,把ESP32CAM 上的GND和IO0的连线断开,再把USB转TTL连接电脑。
打开Thonny 进入设置--解释器 ,选好端口 。

会看到如下界面
表示此时可以与ESP32交互了。
5. 在Thonny里新建一个py文件,把定时拍照代码复制进去,然后存入ESP32CAM,运行就可以了。
如果要上电就自动运行,把代码写到boot.py 文件里就可以了。
import camera
from machine import Pin
import uos
import utime
from machine import SDCard
def led_switch(s,t):
led = Pin(4, Pin.OUT)
for i in range(s):
led.value(1)
utime.sleep(t)
led.value(0)
utime.sleep(t)
try:
state = camera.init(0, format=camera.JPEG, fb_location=camera.PSRAM)
except Exception as e:
camera.deinit()
state = camera.init(0, format=camera.JPEG, fb_location=camera.PSRAM)
print("Camera State: ", state)
# 其他设置:
# 上翻下翻
camera.flip(1)
#左/右
camera.mirror(1)
# 分辨率camera.FRAME_HD
camera.framesize(camera.FRAME_HD)
# 选项如下:
# FRAME_96X96 FRAME_QQVGA FRAME_QCIF FRAME_HQVGA FRAME_240X240
# FRAME_QVGA FRAME_CIF FRAME_HVGA FRAME_VGA FRAME_SVGA
# FRAME_XGA FRAME_HD FRAME_SXGA FRAME_UXGA FRAME_FHD
# FRAME_P_HD FRAME_P_3MP FRAME_QXGA FRAME_QHD FRAME_WQXGA
# FRAME_P_FHD FRAME_QSXGA
# 有关详细信息,请查看此链接:https://bit.ly/2YOzizz
# 特效
camera.speffect(camera.EFFECT_NONE)
#选项如下:
# 效果\无(默认)效果\负效果\ BW效果\红色效果\绿色效果\蓝色效果\复古效果
# EFFECT_NONE (default) EFFECT_NEG \EFFECT_BW\ EFFECT_RED\ EFFECT_GREEN\ EFFECT_BLUE\ EFFECT_RETRO
# 白平衡
#camera.whitebalance(camera.WB_OFFICE)
#选项如下:
# WB_NONE (default) WB_SUNNY WB_CLOUDY WB_OFFICE WB_HOME
# 饱和
camera.saturation(0)
#-2,2(默认为0). -2灰度
# -2,2 (default 0). -2 grayscale
# 亮度
camera.brightness(0)
#-2,2(默认为0). 2亮度
# -2,2 (default 0). 2 brightness
# 对比度
camera.contrast(1)
#-2,2(默认为0).2高对比度
#-2,2 (default 0). 2 highcontrast
# 质量
camera.quality(10)
#10-63数字越小质量越高
# 挂载sd卡到sd文件夹
try:
uos.mount(SDCard(), "/sd")
except Exception as ret:
print("挂载失败...", ret)
else:
print("挂载成功...")
aa = 0
#uos.chdir("sd")
while True:
name = str(utime.time())
buf = camera.capture()
if buf:
with open("/sd/" + name + ".jpg", "wb") as f:
f.write(buf)
print(name + "已经写入sd卡中")
if aa==0:
led_switch(1,0.2)
#第一次拍照 闪光提醒一下
aa=aa+1
utime.sleep(10)
#间隔10秒拍一张
6. 得到图片后,怎么生成视频呢?我写了一段代码,供参考。在电脑上运行改成实际的路径就可以了。
import time
import numpy as np
import cv2,os,tqdm
from PIL import ImageEnhance, Image
def img_enhance(image):
# 亮度增强
enh_bri = ImageEnhance.Brightness(image)
brightness = 1.0
image_brightened = enh_bri.enhance(brightness)
# image_brightened.show()
# 色度增强
enh_col = ImageEnhance.Color(image_brightened)
color = 1.0
image_colored = enh_col.enhance(color)
# image_colored.show()
# 对比度增强
enh_con = ImageEnhance.Contrast(image_colored)
contrast = 1.0
image_contrasted = enh_con.enhance(contrast)
# image_contrasted.show()
# 锐度增强
enh_sha = ImageEnhance.Sharpness(image_contrasted)
sharpness = 1.0
image_sharped = enh_sha.enhance(sharpness)
# image_sharped.show()
return image_sharped
size = (1280,720)
path = "H:" #图片文件夹路径
frame = 20 #帧数
#完成写入对象的创建,第一个参数是合成之后的视频的名称,第二个参数是可以使用的编码器,第三个参数是帧率即每秒钟展示多少张图片,第四个参数是图片大小信息
videowrite = cv2.VideoWriter(r'F:\test'+str(time.time())+'.mp4',-1,frame,size)#20是帧数,size是图片尺寸
img_list=[img for img in os.listdir(path) if "jpg" in str(img)]
img_array=[]
for i in tqdm.tqdm(img_list):
a=os.path.join(path,i)
print(a)
img = cv2.imread(a)
#img = cv2.imdecode(np.fromfile(a, dtype=np.uint8), cv2.IMREAD_COLOR) #路径有中文的读取方法
#print(img)
"""
需要调整图片亮度对比度的话可以取消注释,并修改上面img_enhance的参数
img = Image.fromarray(np.uint8(img)) ## 转换成PIL可以处理的格式
img = img_enhance(img) # 调整图片
img=np.asarray(img) # 把格式转换回来
"""
videowrite.write(img) #写入视频
print('end!')
工程附件
esp32cam.rar
2023/07/22 13:12
全部评论