参加交通运输科技大赛
在十月初自己应老师的要求参加交通运输科技大赛,在这次比赛准备中,老师安排了三个学弟学妹和我组成一个团队,我怕自己不行,就带上了一起参加数学建模的一个朋友,老师安排学弟学妹的意思应该是让我带他(她)们学习。
首先老师通知的比较晚,加上自己本身水平不足,学弟学妹们也没接触过比赛方面,看论文还不会,相关知识储备不足。而且我也没有什么领导能力,没办法规划和调节好队员的工作。最后工作很乱,基本由我一人完成,很累。,最后准备时间不足,学校也没时间组织校内答辩等,寥寥草草的就上交了,最后结果在我的意料之内没任何奖项。
从这个比赛中知道自己水平严重不足,需要继续努力,也知道自己的领导能力不足,以后要注意没有金刚钻,不揽瓷器活。
创新创业项目试验
比赛忙完后就投入自己参加的创新创业项目之中,因为要还原疫情等场景,进行了两周的艰难采购,采购物品很好买到,真正困难的学校报销不易,来来回回十分折腾很难。
基本物资采购后,需要开始搭建模拟场景,因为已经提前设计好相关的布局和采用什么样的材料,因此场景搭建只用了一天完成。
开始进行为期两天的实验,这两天从早到晚,两点一线只在实验室和宿舍,课也没上,整天就希望这赶紧结束,最后大概实验了三百名志愿者并记录下实验数据和相关的个人信息,并为二轮实验进行筛选人员。
python登记数据
因为学校的皮肤电测试仪不能导出数据只能显示实时的数据,应老师要求只能通过录视频的方法记录了,但给后期的读取造成了困扰,每个人大概有5分钟的数据记录,数据每0.5或1秒变动一次,一个人最少也要300个数据,单纯的靠人力去看视频并记录太过困难。
因此我的预期设想是共写两个程序,一个程序视频每隔0.5秒进行截图。另一个程序通过百度文字识别api来识别文字从而提取出我们需要的数据,因为视频拍摄过程问题,所以最后大概减少了一半的工作量。
第一个程序如下:
(程序大部分采用网上搜索到的代码,并进行修改)
# 导入所需要的库
from cv2 import cv2
import numpy as np
import os
# 定义保存图片函数
# image:要保存的图片名字
# addr;图片地址与相片名字的前部分
# num: 相片,名字的后缀。int 类型
def save_image(image,addr,num):
address = addr + str(num)+ '.jpg'
#print(address)
cv2.imwrite(address,image)
#视频如果是反的则用下面代码
#cv2.imwrite(address,cv2.flip(image, -1))
path='D:/all/shipin/'
# 读取视频文件
for it in os.listdir(path):
videoCapture = cv2.VideoCapture(path+it)
# 通过摄像头的方式
# videoCapture=cv2.VideoCapture(1)
#读帧
success, frame = videoCapture.read()
i = 0
timeF = 15
j=0
while success :
i = i + 1
if (i % timeF == 0):
j = j + 1
if not os.path.exists(f'D:/all/imgs/{os.path.splitext(it)[0]}'):
os.mkdir(f'D:/all/imgs/{os.path.splitext(it)[0]}')
save_image(frame,f'D:/all/imgs/{os.path.splitext(it)[0]}/',j)
success, frame = videoCapture.read()
print(f'{os.path.splitext(it)[0]}截图完毕')
第二个程序:
from aip import AipOcr #百度api
import os
import csv
import time
""" 你的 APPID AK SK """
APP_ID = '#######'
API_KEY = '########'
SECRET_KEY = '#########'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
path='D:/all/img/'
path1='D:/all/excel/'
""" 读取图片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
for it in os.listdir(path):
file=path1+os.path.splitext(it)[0]+'.csv'
#print(file)
num=len(os.listdir(path+os.path.splitext(it)[0]))
if not os.path.exists(file):
print(os.path.splitext(it)[0]+'.csv创建并填写')
y=1
else:
with open(file, 'r') as f:
line=f.readlines()
if num<=len(line):
print(os.path.splitext(it)[0]+'.csv已经完整')
continue
else:
y=len(line)+1
print(os.path.splitext(it)[0]+'.csv继续完善')
csv_list=[]
for i in range(y,num+1):
try:
image = get_file_content(path+os.path.splitext(it)[0]+'/'+str(i)+'.jpg')
""" 调用通用文字识别, 图片参数为本地图片 """
dic=client.basicGeneral(image)
if 'words_result' in dic:
for j in dic['words_result']:
try:
words=int(j['words'])
if words<=999 and words >=100:
#print(i,words)
csv_list.append([i,words])
break
except:
pass
else:
#print(csv_list)
csv_list.append([i,''])
else:
#print(csv_list)
csv_list.append([i,''])
except:
csv_list.append([i,''])
if i%10==0 or i==num:
print(f'{os.path.splitext(it)[0]}.csv,已经完成{i},总共{num},剩余{num-i}')
with open(path1+os.path.splitext(it)[0]+'.csv','a+',newline='') as f:
csv.writer(f).writerows(csv_list)
csv_list=[]
print(f'{os.path.splitext(it)[0]}.csv已经完成')
指点天下自动打卡和签到
其实这个在之前的两个文章都提到过,但为了照顾同学的使用,因此进行多次升级并通过flask搭建了一个自助提交的网站,方便快捷的使用。
主程序主要升级内容有:
- 支持针对不定期的签到,支持循环监测。
- 通过判断是否请假等来监测是否有签到。
- 支持多学校使用。
- token过期前三天提前提醒
- 高德api通过经维度反查地址
自助提交系统功能;
- 支持更新token、经维度、签到打卡状态
- 支持新用户自助提交
- 支持经维度互转
- 支持用户信息查询
- 信息更改均会提醒。
因为大部分用不上,所以设置一下隐藏,回复即可见自助系统链接:
总结:
这两个月的空闲时间都在编程、创新创业和比赛中度过,都忘记给博客除草了,但一直没忘记去浏览友联的博客和其他博客。十二月份早就想写前两个月的记录了,但因为考试就在眼下所以迟迟没有去写,这周刚刚考完4个科目,有了空闲时间,于是就写下了10月11月的小记。
12月即将结束,在12月里有一件有趣的事正在发生,具体结果还未知。预计在下个月放假之后更新,敬请期待。