牛!Python 也可以完成图象姿势鉴别溺水个人行为了!

  • 栏目:知识 时间:2020-12-30 10:46 分享新闻到:
<返回列表

原题目:牛!Python 也可以完成图象姿势鉴别溺水个人行为了!

创作者 | 李秋键

责编 | Carol

封图 | CSDN 免费下载自视觉效果我国

大家都知道伴随着人力智能化智能化的发展趋势,人力智能化的落地式新项目也在越来越越来越越大,特别是在是测算机视觉效果层面。

最先图象归类是依据各有在图象信息内容中常体现的不一样特点,把不一样类型的总体目标区别起来的图象解决方式。
它是运用测算机对图象开展定量分析剖析,把图象或图象中的每一个像元或地区划入为多个个类型中的某一种,以替代人的视觉效果判读。
胡芦岛网站建设

这儿总体程序的步骤以下:

CNN互联网完成图象归类 依据归类結果可视性化輸出結果

最后輸出的程序实际效果以下图:

一、试验前的提前准备

最先大家应用的python版本号是3.6.5常用到的控制模块以下:

configparser :配备文档控制模块 读写能力配备文档

keras:用于训炼和启用神经系统互联网实体模型

素材图片提前准备

最先大家提前准备不一样的照片放进一个特殊文档夹下。照片分成三个类型,一个是溺水照片文档夹,一个是一切正常游水照片文档夹,另外一个是疑是溺水没法判断的照片文档夹。在这里里大家把它放进data文档夹下,

在其中疑是照片文档夹,以下图由此可见:

身体姿势鉴别构建

1、姿势配备文档设置:

在这里里以便充足的精密度和便捷启用,大家应用百度搜索出示的身体剖析插口。依照官方网的要求设置了配备文档。关键便是设置身体每个身体零件联接配备。

其相匹配的编码以下:

def draw_line(self, img):

# nose --- neck

cv2.line(img, (int(self.dic[ 'nose'][ 'x']), int(self.dic[ 'nose'][ 'y'])),

(int(self.dic[ 'neck'][ 'x']), int(self.dic[ 'neck'][ 'y'])), (0, 255, 0), 2)

# neck -- left_shoulder

cv2.line(img, (int(self.dic[ 'neck'][ 'x']), int(self.dic[ 'neck'][ 'y'])),

(int(self.dic[ 'left_shoulder'][ 'x']), int(self.dic[ 'left_shoulder'][ 'y'])), (0, 255, 0), 2)

# neck -- right_shoulder

cv2.line(img, (int(self.dic[ 'neck'][ 'x']), int(self.dic[ 'neck'][ 'y'])),

(int(self.dic[ 'right_shoulder'][ 'x']), int(self.dic[ 'right_shoulder'][ 'y'])), (0, 255, 0), 2)

# left _shoulder -- left_elbow

cv2.line(img, (int(self.dic[ 'left_shoulder'][ 'x']), int(self.dic[ 'left_shoulder'][ 'y'])),

(int(self.dic[ 'left_elbow'][ 'x']), int(self.dic[ 'left_elbow'][ 'y'])), (0, 255, 0), 2)

# left _elbow -- left_wrist

cv2.line(img, (int(self.dic[ 'left_elbow'][ 'x']), int(self.dic[ 'left_elbow'][ 'y'])),

(int(self.dic[ 'left_wrist'][ 'x']), int(self.dic[ 'left_wrist'][ 'y'])), (0, 255, 0), 2)

# right _shoulder -- right_elbow

cv2.line(img, (int(self.dic[ 'right_shoulder'][ 'x']), int(self.dic[ 'right_shoulder'][ 'y'])),

(int(self.dic[ 'right_elbow'][ 'x']), int(self.dic[ 'right_elbow'][ 'y'])), (0, 255, 0), 2)

# right _elbow -- right_wrist

cv2.line(img, (int(self.dic[ 'right_elbow'][ 'x']), int(self.dic[ 'right_elbow'][ 'y'])),

(int(self.dic[ 'right_wrist'][ 'x']), int(self.dic[ 'right_wrist'][ 'y'])), (0, 255, 0), 2)

# neck -- left_hip

cv2.line(img, (int(self.dic[ 'neck'][ 'x']), int(self.dic[ 'neck'][ 'y'])),

(int(self.dic[ 'left_hip'][ 'x']), int(self.dic[ 'left_hip'][ 'y'])), (0, 255, 0), 2)

# neck -- right_hip

cv2.line(img, (int(self.dic[ 'neck'][ 'x']), int(self.dic[ 'neck'][ 'y'])),

(int(self.dic[ 'right_hip'][ 'x']), int(self.dic[ 'right_hip'][ 'y'])), (0, 255, 0), 2)

# left _hip -- left_knee

cv2.line(img, (int(self.dic[ 'left_hip'][ 'x']), int(self.dic[ 'left_hip'][ 'y'])),

(int(self.dic[ 'left_knee'][ 'x']), int(self.dic[ 'left_knee'][ 'y'])), (0, 255, 0), 2)

# right _hip -- right_knee

cv2.line(img, (int(self.dic[ 'right_hip'][ 'x']), int(self.dic[ 'right_hip'][ 'y'])),

(int(self.dic[ 'right_knee'][ 'x']), int(self.dic[ 'right_knee'][ 'y'])), (0, 255, 0), 2)

# left _knee -- left_ankle

cv2.line(img, (int(self.dic[ 'left_knee'][ 'x']), int(self.dic[ 'left_knee'][ 'y'])),

(int(self.dic[ 'left_ankle'][ 'x']), int(self.dic[ 'left_ankle'][ 'y'])), (0, 255, 0), 2)

# right _knee -- right_ankle

cv2.line(img, (int(self.dic[ 'right_knee'][ 'x']), int(self.dic[ 'right_knee'][ 'y'])),

(int(self.dic[ 'right_ankle'][ 'x']), int(self.dic[ 'right_ankle'][ 'y'])), (0, 255, 0), 2)

在设定好基本的配备文档后,大家根据百度搜索申请办理的账户密匙这些启用插口就可以。这儿完成的实际效果以下:

相匹配编码以下:

classBaiDuAPI(object):

# 独特 结构涵数 原始化涵数

def__init__(self):

app_id = "20038443"

api_key = "LhtctcN7hf6VtkHHcUGwXKfw"

secret_key = "wzWACH345kE0FGhvA9CqWsiRwltf5wFE"

self.client = AipBodyAnalysis(app_id, api_key, secret_key)

""" 载入照片 """

defget_file_content(self, photoPath):

withopen(photoPath, 'rb') asfp:

returnfp.read

""" 主涵数 """

deffile_main(self, photoPath):

img = self.get_file_content( '{}'.format(photoPath))

""" 启用身体重要点鉴别 """

# 这里只有对一本人开展重要点鉴别

# 换句话说一个照片假如有许多人得话,只有标明一本人的骨节特点

# 这里能够做改动,即开展把一幅图全部人的骨节特点都表述出去

# ------

# print(self.client.bodyAnalysis(img))

result = self.client.bodyAnalysis(img)[ 'person_info'][ 0][ 'body_parts']

jo = joint.Joint(result)

jo.xunhun(photoPath)

# print(result )

1、神经系统互联网的构建:

这儿设置的CNN实体模型挺普遍的实体模型类似,根据设置卷积核、步长、训炼批号这些构建互联网。

编码以下:

model = Sequential #建立一个神经系统互联网目标

#加上一个卷积层,传到固定不动宽高三安全通道的照片,以32种不一样的卷积核搭建32张特点图,

# 卷积核尺寸为3*3,搭建特点图占比和原照同样,激话涵数为relu涵数。

model. add(Conv2D(input_shape=(IMG_W,IMG_H, 3),filters= 32,kernel_size= 3,padding= 'same',activation= 'relu'))

#再度搭建一个卷积层

model. add(Conv2D(filters= 32,kernel_size= 3,padding= 'same',activation= 'relu'))

#搭建一个池化层,获取特点,池化层的池化对话框为2*2,步长为2。

model. add(MaxPool2D(pool_size= 2,strides= 2))

#再次搭建卷积层和池化层,差别是卷积核总数为64。

model. add(Conv2D(filters= 64,kernel_size= 3,padding= 'same',activation= 'relu'))

model. add(Conv2D(filters= 64,kernel_size= 3,padding= 'same',activation= 'relu'))

model. add(MaxPool2D(pool_size= 2,strides= 2))

#再次搭建卷积层和池化层,差别是卷积核总数为128。

model. add(Conv2D(filters= 128,kernel_size= 3,padding= 'same',activation= 'relu'))

model. add(Conv2D(filters= 128,kernel_size= 3,padding= 'same',activation= 'relu'))

model. add(MaxPool2D(pool_size= 2, strides= 2))

model. add(Flatten) #数据信息平扁化

model. add(Dense( 128,activation= 'relu')) #搭建一个具备12八个神经系统元的全联接层

model. add(Dense( 64,activation= 'relu')) #搭建一个具备64个神经系统元的全联接层

model. add(Dropout(DROPOUT_RATE)) #添加dropout,避免过拟合。

model. add(Dense(CLASS,activation= 'softmax')) #輸出层,一共3个神经系统元,相匹配3个归类

adam = Adam(lr=LEARNING_RATE) #建立Adam提升器

modelpile(optimizer=adam,loss= 'categorical_crossentropy',metrics=[ 'accuracy']) #应用交叉式熵成本涵数,adam提升器提升实体模型,并获取准确率

train_generator = train_datagen.flow_from_directory( #设定训炼集迭代更新器

TRAIN_PATH, #训炼集储放相对路径

target_size=(IMG_W,IMG_H), #训炼集照片规格

batch_size=BATCH_SIZE #训炼集批号

)

test_generator = test_datagen.flow_from_directory( #设定检测集迭代更新器

TEST_PATH, #检测集储放相对路径

target_size=(IMG_W,IMG_H), #检测集照片规格

batch_size=BATCH_SIZE, #检测集批号

)

print(train_generator.class_indices) #复印迭代更新器归类

try:

model = load_model( '{}.h5'.format(SAVE_PATH)) #试着载入训炼好的实体模型,再度训炼

print( 'model upload,start training!')

except:

print( 'not find model,start training') #假如沒有训炼过的实体模型,则从头开始刚开始训炼

model.fit_generator( #实体模型拟合

train_generator, #训炼集迭代更新器

steps_per_epoch=len(train_generator), #每一个周期时间必须迭代更新是多少步

epochs=EPOCHS, #迭代更新周期时间

validation_data=test_generator, #检测集迭代更新器

validation_steps=len(test_generator) #检测集迭代更新是多少步

)

model.save( '{}.h5'.format(SAVE_PATH)) #储存实体模型

print( 'finish {} epochs!'.format(EPOCHS))

2、实体模型的启用:

编码以下:

# 加载实体模型

model = load_model( 'model_selector.h5')

label = np.array([ '一切正常', '疑是', '溺水'])

defimage_change(image):

image = image.resize(( 224, 224))

image = img_to_array(image)

image = image / 255

image = np.expand_dims(image, 0)

returnimage

classBaiDuAPI(object):

# 独特 结构涵数 原始化涵数

def__init__(self):

app_id = "20038443"

api_key = "LhtctcN7hf6VtkHHcUGwXKfw"

secret_key = "wzWACH345kE0FGhvA9CqWsiRwltf5wFE"

self.client = AipBodyAnalysis(app_id, api_key, secret_key)

""" 载入照片 """

defget_file_content(self, photoPath):

withopen(photoPath, 'rb') asfp:

returnfp.read

""" 主涵数 """

deffile_main(self, photoPath):

img = self.get_file_content( '{}'.format(photoPath))

""" 启用身体重要点鉴别 """

# 这里只有对一本人开展重要点鉴别

# 换句话说一个照片假如有许多人得话,只有标明一本人的骨节特点

# 这里能够做改动,即开展把一幅图全部人的骨节特点都表述出去

# ------

# print(self.client.bodyAnalysis(img))

result = self.client.bodyAnalysis(img)[ 'person_info'][ 0][ 'body_parts']

jo = joint.Joint(result)

jo.xunhun(photoPath)

# print(result )

#预测分析2.jpg的結果

try:

image = load_img( "2.jpg")

#plt.imshow(image)

image = image_change(image)

baiduapi = BaiDuAPI

baiduapi.file_main( '2.jpg')

img=cv2.imread( "temp.jpg")

img_PIL = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

myfont = ImageFont.truetype( r'C:/Windows/Fonts/simfang.ttf', 40)

draw = ImageDraw.Draw(img_PIL)

draw.text(( 300, 10), label[model.predict_classes(image)][ 0], font=myfont, fill=( 200, 100, 0))

img_OpenCV = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)

cv2.imshow( 'frame', img_OpenCV)

cv2.waitKey( 0)

except:

pass

#预测分析1.jpg的結果

try:

image = load_img( "1.jpg")

#plt.imshow(image)

image = image_change(image)

baiduapi = BaiDuAPI

baiduapi.file_main( '1.jpg')

img=cv2.imread( "temp.jpg")

img_PIL = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

myfont = ImageFont.truetype( r'C:/Windows/Fonts/simfang.ttf', 40)

draw = ImageDraw.Draw(img_PIL)

draw.text(( 300, 10), label[model.predict_classes(image)][ 0], font=myfont, fill=( 200, 100, 0))

img_OpenCV = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)

cv2.imshow( 'frame', img_OpenCV)

cv2.waitKey( 0)

except:

pass

#预测分析3.jpg的結果

try:

image = load_img( "3.jpg")

#plt.imshow(image)

image = image_change(image)

baiduapi = BaiDuAPI

baiduapi.file_main( '3.jpg')

img=cv2.imread( "temp.jpg")

img_PIL = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

myfont = ImageFont.truetype( r'C:/Windows/Fonts/simfang.ttf', 40)

draw = ImageDraw.Draw(img_PIL)

draw.text(( 300, 10), label[model.predict_classes(image)][ 0], font=myfont, fill=( 200, 100, 0))

img_OpenCV = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)

cv2.imshow( 'frame', img_OpenCV)

cv2.waitKey( 0)

except:

pass

最后运作程序結果以下:

源代码详细地址:

https://pan.baidu/s/1qMwPCTTyqDWPXoPj1XnKgA

获取码:us2k

创作者介绍:

李秋键,CSDNblog权威专家,CSDN达人课创作者。研究生在学于我国煤业高校,开发设计有taptap比赛得奖这些。回到凡科,查询大量

义务编写:

分享新闻到:

更多阅读

牛!Python 也可以完成图象姿势鉴别溺水个

知识 2020-12-30
原题目:牛!Python 也可以完成图象姿势鉴别溺水个人行为了! 创作者 | 李秋键 责编 | Carol 封...
查看全文

网编,如何拷贝一部分內容到手机微信啊

知识 2020-12-30
模拟题目:网编,怎样复制一一部分内容拿到机手机微信啊?! 小伙子子伴 小米手机手机上,...
查看全文

HTML5开发设计岗道道經典的招聘面试题

知识 2020-12-30
模拟题目:HTML5开发设计设计方案岗道道经典的招骋招聘面试题 HTML5语言当下最红,由于HTML5应...
查看全文
返回全部新闻


区域站点: 南丰县h5和小程序有什么区别   南宫市h5微信   囊谦县h5免费   南和县h5抽奖大转盘制作   南华县h5和小程序有什么区别   南江县h5微信   南京市h5免费   南靖县h5抽奖大转盘制作   南康市h5和小程序有什么区别   南乐县h5微信   南陵县h5免费   南宁市h5抽奖大转盘制作   南平市h5和小程序有什么区别   南皮县h5微信   南市区h5免费   南通市h5抽奖大转盘制作   南投县h5和小程序有什么区别   南雄市h5微信   南溪县h5免费   南阳市h5抽奖大转盘制作   南漳县h5和小程序有什么区别   南召县h5微信   南郑县h5免费   那坡县h5抽奖大转盘制作   那曲县h5和小程序有什么区别   纳雍县h5微信   讷河市h5免费   内黄县h5抽奖大转盘制作   内江市h5和小程序有什么区别   内丘县h5微信   内乡县h5免费   嫩江市h5抽奖大转盘制作   聂荣县h5和小程序有什么区别   尼玛县h5微信   尼木县h5免费   宁安市h5抽奖大转盘制作   宁波市h5和小程序有什么区别   宁城县h5微信   宁德市h5免费   宁都县h5抽奖大转盘制作   宁国市h5和小程序有什么区别   宁海县h5微信   宁化县h5免费   宁晋县h5抽奖大转盘制作   宁陵县h5和小程序有什么区别   宁明县h5微信   宁南县h5免费   宁强县h5抽奖大转盘制作   宁陕县h5和小程序有什么区别   宁武县h5微信   宁乡市h5免费   宁阳县h5抽奖大转盘制作   宁远县h5和小程序有什么区别   农安县h5微信   磐安县h5免费   盘锦市h5抽奖大转盘制作   盘山县h5和小程序有什么区别   磐石市h5微信   盘州市h5免费   蓬安县h5抽奖大转盘制作   澎湖县h5和小程序有什么区别   蓬莱市h5微信   彭山县h5免费   蓬溪县h5抽奖大转盘制作   彭阳县h5和小程序有什么区别   彭泽县h5微信   彭州市h5免费   偏关县h5抽奖大转盘制作   平安县h5和小程序有什么区别   平昌县h5微信   平定县h5免费   屏东县h5抽奖大转盘制作   平度市h5和小程序有什么区别   平果县h5微信   平和县h5免费   平湖市h5抽奖大转盘制作   平江县h5和小程序有什么区别   平乐县h5微信   平凉市h5免费   平利县h5抽奖大转盘制作   平罗县h5和小程序有什么区别   平陆县h5微信   屏南县h5免费   平泉市h5抽奖大转盘制作   屏山县h5和小程序有什么区别   平顺县h5微信   平塘县h5免费   平潭县h5抽奖大转盘制作   平武县h5和小程序有什么区别   萍乡市h5微信   平乡县h5免费   平阳县h5抽奖大转盘制作   平遥县h5和小程序有什么区别   平阴县h5微信   平邑县h5免费   平远县h5抽奖大转盘制作   平舆县h5和小程序有什么区别   皮山县h5微信   普安县h5免费   浦北县h5抽奖大转盘制作   浦城县h5和小程序有什么区别   普洱市h5微信   普格县h5免费   浦江县h5抽奖大转盘制作   普兰县h5和小程序有什么区别   普宁市h5微信   莆田市h5免费   迁安市h5抽奖大转盘制作   乾安县h5和小程序有什么区别   潜江市h5微信   潜山市h5免费  

友情链接: 月福步宜 超恒鑫电子

Copyright © 2002-2020 h5免费_h5抽奖大转盘制作_h5和小程序有什么区别_h5微信_手机抽奖小程序 版权所有 (网站地图) 备案号:粤ICP备10235580号