芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
ESP32CAM+micropython 延时摄影
原创 精华 置顶 发布时间:2023/07/22 13:12
版块:
开源项目
简介:使用ESP32CAM自动定时拍照,然后制作延时视频。

 

前段时间在积分商城耗费巨资兑换了ESP32CAM,这几天有空,上手用了下,还不错。

今天把我用它【自动定时拍照然后制作延时视频】的过程分享给大家,摄像头画质感人,我技术水平有限,请多指教。

先上成果,拍了1030张图片合成的:

工具材料

  1. ESP32CAM      2. USB 转 TTL    3. 杜邦线   4. thonny   5. SD卡

 

 

步骤

 

  1. 把SD卡插入ESP32CAM,参考下图接线,建议用5V,特别注意要把GND和IO0 接通:

2.下载&安装Thonny ,下载地址:https://thonny.org/

 

3.下载micropython 固件 ,我已经打包在附件里了。

 

3.把USB转TTL 连接电脑,打开Thonny,进行固件烧录。


1652846232274

在弹出的框中点击下图所示位置

1652846254262

会再次弹出1个框

1652846304030

依次选择好 端口,固件 ,点击安装即可。当出现“Done”时表示完成,关闭窗口即可,此时,已经将MicroPython烧录好了。

 

4. 拔出USB转TTL,把ESP32CAM 上的GND和IO0的连线断开,再把USB转TTL连接电脑。

   打开Thonny 进入设置--解释器 ,选好端口 。

 

会看到如下界面

1652846712037

表示此时可以与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
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
发布者
要减肥的大炮
目录

工具材料

步骤

最新帖子
萤火工场GD32VW553-IOT测评+蓝牙串口透传树莓派pico 2测评 - 初体验【工程师经验】+ 飞线【开源】zvs142857 2.1A,3A快充 充电宝迷你UC3842 开关电源优化全解析:攻克常见难题,提升性能
热门版块
查看更多
电子元器件
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计
开源项目
电子DIY
维修技术
飞腾

850

收藏

分享

微信扫码
分享给好友

评论