——记2020.4.13百度“Python小白逆袭大神”在线课程

这是一个最好的时代,也是一个最坏的时代。

这是一个最好的时代,互联网的兴起,各种学习资源俯拾即是,各种论坛社区提问即有回响,只要有心就能自我学习。

这是一个最坏的时代,互联网的兴起,各种娱乐诱惑比比皆是,各种视频游戏勾魂夺魄,稍一不自律,时间就一去不复返。

在这样一个时代,自律反而成了最难的事情,今早立下的目标,往往成为今晚失眠的理由。

在这样一个知识爆炸的时代,幸而有这样一批人,不但兢兢业业开发出好用的国产深度学习框架,同时通过一系列精心设计的课程,免费带着大家入门,监督大家学习,通过努力营造群体学习的气氛,丰厚的奖品,来鼓励大家学习,促进大家学习。这就是百度AI团队在做的。

上一个CV打卡营学的比较艰辛,听到这个“Python小白逆袭”的名字,第一感觉不会太难,听下来觉得自己还是太天真了,大厂出品的课程,怎么可能没有难度!

一共五天的在线课程每天讲课一小时,内容分别是:Python基础、Python进阶、常用Python库、PaddleHub体验与应用、EasyDL体验与应用。讲课内容简单,但是每天的作业内容很有挑战性,组建几个大微信群,大家在里面集体讨论问题,克服作业难关,无形中提高了一波编程功力。

Day1作业:

从一个简单的格式化输出操作,到利用python的os包进行文件遍历,帮助大家熟悉AI studio平台的使用。

Day2作业:

利用爬虫爬取《青春有你2》选手信息,掌握requests和bs4的使用。深度学习对数据需求量巨大,爬虫可以有效帮助我们准备数据。由于王姝慧图集有8张图片是动态加载的,需要通过getPhoto请求获得新的图片地址,当时由于时间紧张就手写了八张图片的地址,较优解法参见:https://blog.csdn.net/yinyiyu/article/details/105722144

def down_pic(name,pic_urls):'''根据图片链接列表pic_urls, 下载所有图片,保存在以name命名的文件夹中,'''path = 'work/'+'pics/'+name+'/'if not os.path.exists(path):os.makedirs(path)for i, pic_url in enumerate(pic_urls):try:pic = requests.get(pic_url, timeout=15)string = str(i + 1) + '.jpg'with open(path+string, 'wb') as f:f.write(pic.content)print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))except Exception as e:print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))print(e)continuespecial_shuhui = ['https://bkimg.cdn.bcebos.com/pic/0dd7912397dda144610bc8ebbdb7d0a20cf4866d','https://bkimg.cdn.bcebos.com/pic/4034970a304e251f829d40a1a886c9177f3e5304','https://bkimg.cdn.bcebos.com/pic/96dda144ad3459827c8841cb03f431adcbef846d','https://bkimg.cdn.bcebos.com/pic/ac345982b2b7d0a2dccba0c4c4ef76094b369a6d','https://bkimg.cdn.bcebos.com/pic/7c1ed21b0ef41bd598164cad5eda81cb39db3d25','https://bkimg.cdn.bcebos.com/pic/d31b0ef41bd5ad6eebbcc0b38ecb39dbb6fd3c25','https://bkimg.cdn.bcebos.com/pic/0df431adcbef76099f093dc621dda3cc7cd99e6d','https://bkimg.cdn.bcebos.com/pic/eaf81a4c510fd9f9d72af9b0b965c32a2834359b0e9b'
]def crawl_pic_urls():'''爬取每个选手的百度百科图片,并保存'''with open('work/'+ today + '.json', 'r', encoding='UTF-8') as file:json_array = json.loads(file.read())headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}all_urls = []for star in json_array:pic_urls = []name = star['name']link = star['link']#!!!请在以下完成对每个选手图片的爬取,将所有图片url存储在一个列表pic_urls中!!!pic_urls = []try:response = requests.get(link,headers=headers)soup = BeautifulSoup(response.text,'lxml')#返回的是class为summary-pic的<div>所有标签pic_link = soup.find(name='div', attrs={'class':'summary-pic'}).find('a')['href']if pic_link == None:print(link)match_obj = re.match(r'(.*)?\?.*', pic_link)pic_link = 'https://baike.baidu.com' + match_obj.group(1)#print(pic_link)response = requests.get(pic_link,headers=headers)soup = BeautifulSoup(response.text,'lxml')pic_list = soup.find(name='div', attrs={'class':'pic-list'}).find_all('a')for idx in range(len(pic_list)):if pic_list[idx].find('img') == None:print(pic_link, idx)pic_urls.append(special_shuhui[idx-30])continuepic_addr = pic_list[idx].find('img').attrs['src']match_obj = re.match(r'(.*)?\?.*', pic_addr)pic_urls.append(match_obj.group(1))except Exception as e:print(e)#!!!根据图片链接列表pic_urls, 下载所有图片,保存在以name命名的文件夹中!!!down_pic(name,pic_urls)

Day3作业:

分析青春有你选手体重数据,绘制饼图。示例用的matplotlib,这里使用百度提供的pyechart来绘制。当时觉得用百度的库来绘图应该有加分,结果证明还不如老老实实用matplotlib的分高。

import pandas as pdfrom pyecharts.charts import Pie
from pyecharts import options as optsdf = pd.read_json('data/20200423.json')
weights = df['weight'].apply(lambda x: float(''.join(filter(lambda ch: ch in '0123456789.', x))))weight_seg = pd.cut(weights.values, bins=[0, 45, 50, 55, weights.max()+1])
weight_count = list(weight_seg.value_counts())seg_names = ['<=45kg', '45~50kg', '50~55kg', '>55kg']
weight_data = []
for idx in range(len(seg_names)):weight_data.append((seg_names[idx], weight_count[idx]))pie_show = Pie(opts.InitOpts(width = "900px",  height = "1000px"))
pie_show.add(series_name = '青春有你2',data_pair = weight_data,radius=["40%", "55%"],center=["50%", "32%"],label_opts=opts.LabelOpts(position="outside",formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",background_color="#eee",border_color="#aaa",border_width=1,border_radius=4,color='auto',rich={"a": {"color": "#999", "lineHeight": 22, "align": "center"},"abg": {"backgroundColor": "#e3e3e3","width": "100%","align": "right","height": 22,"borderRadius": [4, 4, 0, 0],},"hr": {"borderColor": "#aaa","width": "100%","borderWidth": 0.5,"height": 0,},"b": {"fontSize": 16, "lineHeight": 33},"per": {"color": "#eee","backgroundColor": "#334455","padding": [2, 4],"borderRadius": 2,},},)
) \
.set_global_opts(title_opts=opts.TitleOpts(title="青春有你2体重分布")) \
.render("weights.html")

Day4作业:

青春有你Top5选手识别。利用PaddleHub与训练的图像分类模型,自己提供数据集进行FineTune,进行选手识别。

爬取百度图片图片:

import re
import requests
from urllib import error
from bs4 import BeautifulSoup
import os
import numpy as np
import sys
import globimport PIL.Image as Imageimport paddlehub as hubimport cv2num = 0
numPicture = 0
file = ''
List = []def get_progressbar_str(progress):END = 170MAX_LEN = 30BAR_LEN = int(MAX_LEN * progress)return ('Progress:[' + '=' * BAR_LEN +('>' if BAR_LEN < MAX_LEN else '') +' ' * (MAX_LEN - BAR_LEN) +'] %.1f%%' % (progress * 100.))def Find(url):global Listprint('正在检测图片总数,请稍等.....')t = 0i = 1s = 0while t < 1000:Url = url + str(t)try:Result = requests.get(Url, timeout=7)except BaseException:t = t + 60continueelse:result = Result.textpic_url = re.findall('"objURL":"(.*?)",', result, re.S)  # 先利用正则表达式找到图片urls += len(pic_url)if len(pic_url) == 0:breakelse:List.append(pic_url)t = t + 60return sdef recommend(url):Re = []try:html = requests.get(url)except error.HTTPError as e:returnelse:html.encoding = 'utf-8'bsObj = BeautifulSoup(html.text, 'html.parser')div = bsObj.find('div', id='topRS')if div is not None:listA = div.findAll('a')for i in listA:if i is not None:Re.append(i.get_text())return Redef downloadPicture(path_prefix, html, keyword, label=''):global numPictureglobal numpic_url = re.findall('"objURL":"(.*?)",', html, re.S)  # 先利用正则表达式找到图片urlfor each in pic_url:#print('正在下载第' + str(num + 1) + '张图片,图片地址:' + str(each))try:if each is not None:pic = requests.get(each, timeout=7)else:continueexcept BaseException:#print('错误,当前图片无法下载')continueelse:string = os.path.join(path_prefix, label + '_' + str(num) + '.jpg')fp = open(string, 'wb')fp.write(pic.content)fp.close()num += 1sys.stderr.write('\r\033[K' + get_progressbar_str(num / numPicture))sys.stderr.flush()if num >= numPicture:returndef difference(hist1,hist2):sum1 = 0for i in range(len(hist1)):if (hist1[i] == hist2[i]):sum1 += 1else:sum1 += 1 - float(abs(hist1[i] - hist2[i]))/ max(hist1[i], hist2[i])return sum1/len(hist1)def similary_calculate(path1 , path2):try:img1 = Image.open(path1).resize((256,256)).convert('RGB')img2 = Image.open(path2).resize((256,256)).convert('RGB')return difference(img1.histogram(), img2.histogram())except Exception as e:print(e)return Nonedef check_folder(folder, pic):#module = hub.Module(name='pyramidbox_face_detection')module = hub.Module(name='ultra_light_fast_generic_face_detector_1mb_640')num_similar = 0num_bad = 0num_multi_face = 0pic_number = len(glob.glob(pathname=os.path.join(folder, '*.jpg')))processed_num = 0for root, directors, files in os.walk(folder):for filename in files:processed_num += 1sys.stderr.write('\r\033[K' + get_progressbar_str(processed_num / pic_number))sys.stderr.flush()filepath = os.path.join(root,filename)if (filepath.endswith(".png") or filepath.endswith(".jpg")):sim_prop = similary_calculate(pic, filepath)if sim_prop is None or sim_prop > 0.9:os.remove(filepath)num_similar += 1continueif cv2.imread(filepath) is None:os.remove(filepath)num_bad += 1continueres = module.face_detection(data={'image':[filepath]})if len(res[0]['data']) != 1:os.remove(filepath)num_multi_face += 1continueprint('剔除与测试集相似图片{}张, 剔除无效图片{}张, 剔除多人图片{}张'.format(num_similar, num_bad, num_multi_face))def download_pics():#tm = int(input('请输入每类图片的下载数量 '))global numPictureglobal numtm = 500numPicture = tmline_list = []with open('./name.txt', encoding='utf-8') as f:line_list = [k.strip().split(sep=' ', maxsplit=2) for k in f.readlines()]  # strip spacefor item in line_list:word = item[0]label = item[1]keyword = word + '+青春有你'url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + keyword + '&pn='tot = Find(url)Recommend = recommend(url)  # 记录相关推荐print('经过检测{}类图片共有{}张, 计划下载{}张'.format(word, tot, numPicture))filedir = labely = os.path.exists(label)if y == 1:print('Directory already exists!')filedir = filedir+'_bk'os.mkdir(filedir)else:os.mkdir(filedir)t = 0tmp = urlnum = 0while t < numPicture:try:url = tmp + str(t)result = requests.get(url, timeout=10)#print(url)except error.HTTPError as e:print('Network connection error!')t = t + 60else:downloadPicture(filedir, result.text, word, label)t = t + 60#numPicture = numPicture + tmprint('{} picture download finished! '.format(word))if __name__ == '__main__':download_pics()for idx in range(5):label = str(idx)check_folder(os.path.join(os.getcwd(), label), os.path.join('test', label + '.jpg'))

百度图片上还是有很多不相关的图片,关键字的过滤效果不好。可以考虑去选手微博上爬图片,质量比较高。

还是要感谢百度提供的免费算力卡和免费课程,AI大势下还是要有强力的国产品牌!

PaddlePaddle飞桨入门之旅(二)相关推荐

  1. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  2. 人工智能 - paddlepaddle飞桨 - 入门之安装教程

    人工智能 - paddlepaddle飞桨 - 入门之安装教程 快速安装 PaddlePaddle支持使用pip快速安装, 执行下面的命令完成CPU版本的快速安装: pip install -U pa ...

  3. DL之paddlepaddle:百度深度学习框架paddlepaddle飞桨的简介、安装、使用方法之详细攻略

    DL之paddlepaddle:百度深度学习框架paddlepaddle飞桨的简介.安装.使用方法之详细攻略 目录 paddlepaddle百度深度学习框架的简介 1.飞桨全景图与四大领先技术 2.丰 ...

  4. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 个性化推荐

    人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 个性化推荐 本教程源代码目录在book/recommender_system,初次使用请您参考Book文档使用说明. 说明: 硬件 ...

  5. PaddlePaddle飞桨论文复现营——3D Residual Networks for Action Recognition学习笔记

    PaddlePaddle飞桨论文复现营--3D Residual Networks for Action Recognition学习笔记 1 背景知识 1.1 C3D C3D是一种3D卷积提取视频特征 ...

  6. 安信可PB-03蓝牙模组入门之旅 二:SDK二次开发入门,认识架构,开始点亮一盏LED。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 安信可PB-03蓝牙模组入门之旅一:Windows SDK二次 ...

  7. 李宏毅《机器学习》飞桨特训营(二)——回归(含作业:PM2.5预测)

    李宏毅<机器学习>飞桨特训营(二) 一. 回归-案例学习 二. 回归-演示 三. 误差从何而来? 3.1 误差的来源 3.2 误差出现的原因 3.3 欠拟合与过拟合 3.4 如何减小误差? ...

  8. PaddlePaddle飞桨OCR文本检测——检测模型训练(二)

    上一篇安装https://blog.csdn.net/weixin_42845306/article/details/112688405 飞桨的OCR模型分为检测.识别和分类,先看检测. 检测就是将( ...

  9. PaddlePaddle飞桨OCR文本检测——入门安装GPU版(一)

    首先放上github上的开源代码网址,里面的帮助文档说的非常详细: https://github.com/PaddlePaddle/PaddleOCR/ 环境安装 python中环境使用pip安装: ...

最新文章

  1. (九)OpenStack---M版---双节点搭建---Swift安装和配置(单存储节点)
  2. KitKat系统发现BUG:付费输入法更新后自动停用
  3. Swoole安装步骤
  4. c语言随机生成整数存放一维数组_C语言入门教程(十)多维数组
  5. 实用 —— PowerCLI (一)
  6. C++泛型编程实现平衡二叉搜索树AVL
  7. Java面试题整理,java常用排序算法图解
  8. 玩转Docker镜像
  9. 人工智能产业链深度透析—产业应用医疗篇
  10. Linux IO控制命令生成
  11. JVM基础学习之基本概念、可见性与同步
  12. 阿里系盒子英菲克i6八核 科学使用 笔记 (2015年12月26日成功)
  13. directshow方法关键帧java,如何实现DirectShow source filter
  14. wps2019将表格数据转换成工资条的操作方法
  15. 吃妖怪的萝莉和帅气道长大叔,古风治愈漫画温暖来袭!
  16. 舞蹈链算法与数独求解
  17. 2. 详解 QEMU 架构
  18. 18年6月六级翻译词汇
  19. 电脑接两个屏幕,其中一个偶尔闪灭
  20. 使用mlpack解决机器学习基本算法之一准确率、精准率、召回率、F1以及mlpack中的Classify

热门文章

  1. python交易策略源码_经典的股票量化交易策略(含源码)
  2. 趣图:菜鸟程序员的工作状态…
  3. 前端实习生400字周记
  4. java 设置窗体 无边框 关闭按钮_求助 java 如何编写JFrame窗体右上角红色打叉关闭按钮的事件?...
  5. 安装VMware tools按钮是灰的
  6. HCIA基础知识(1)
  7. mac安装使用xampp
  8. 判别两棵树是否相等 设计算法_BAIR最新RL算法超越谷歌Dreamer,性能提升2.8倍
  9. 适合小白的pathon学习网站
  10. 最简单的磁盘分区教程