人臉年齡識(shí)別屬于人臉屬性識(shí)別的范疇,人臉屬性識(shí)別可對(duì)圖片中的人臉進(jìn)行檢測(cè)定位,并識(shí)別出人臉的相關(guān)屬性(如年齡、性別、表情、種族、顏值等)內(nèi)容。不同屬性識(shí)別的算法可以相同,也可以不同。rude-carnie是做年齡識(shí)別和性別識(shí)別的一個(gè)開(kāi)源項(xiàng)目,基于TensorFlow,源代碼網(wǎng)址:http://www.github.com/dpressel/rude-carnie。下面我們基于這個(gè)項(xiàng)目源碼來(lái)講年齡識(shí)別。
我們可以把年齡劃分為幾個(gè)段[’(0, 2)’,’(4, 6)’,’(8, 12)’,’(15, 20)’,’(25, 32)’,’(38, 43)’,’(48, 53)’,’(60, 100)’],然后基于分類的思想來(lái)做年齡預(yù)測(cè)問(wèn)題。用下面的腳本命令:
python3 guess.py --model_type inception --model_dir /home/hadoop/chongdianleme/ nianling/22801/inception/22801 --filename /home/hadoop/chongdianleme/data/myimages/baidu1.jpg
基于訓(xùn)練好的年齡模型和人臉圖片就能預(yù)測(cè)出年齡。但是有一個(gè)問(wèn)題,直接這樣預(yù)測(cè)不是很準(zhǔn),因?yàn)閳D片沒(méi)有經(jīng)過(guò)任何處理。我們可以通過(guò)opencv和上面講到的FaceNet的人臉檢測(cè)和對(duì)齊算法來(lái)做。但opencv比較簡(jiǎn)單,F(xiàn)aceNet的人臉檢測(cè)和對(duì)齊效果比較好,我們可以使用前面提供的http服務(wù)接口http://172.17.100.216:8816/detectAndAlignedService來(lái)處理,然后把檢測(cè)和對(duì)齊后的人臉圖片傳給guess.py,這樣預(yù)測(cè)處理的效果精準(zhǔn)很多。
另外一個(gè)問(wèn)題是,因?yàn)橛?xùn)練的模型用的是開(kāi)源項(xiàng)目訓(xùn)練好的,是拿外國(guó)人的人臉數(shù)據(jù)訓(xùn)練,這樣用來(lái)預(yù)測(cè)我們中國(guó)人的年齡會(huì)有一些差異,最好的方式是拿我們中國(guó)人自己的人臉年齡數(shù)據(jù)做訓(xùn)練,這樣預(yù)測(cè)才會(huì)更好。
針對(duì)年齡識(shí)別和性別識(shí)別都是用guess.py這個(gè)文件,年齡識(shí)別是多分類,性別是二分類。我們看下guess.py的源碼,如代碼8.5所示:
【代碼8.5】 guess.py
代碼如下(示例):
from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionfrom datetime import datetimeimport mathimport timefrom data import inputsimport numpy as npimport tensorflow as tffrom model import select_model,get_checkpointfrom utils import*import osimport jsonimport csvRESIZE_FINAL=227#性別有兩個(gè)GENDER_LIST=['M','F']#年齡是分段的,可以看成多分類任務(wù)AGE_LIST=['(0, 2)','(4, 6)','(8, 12)','(15, 20)','(25, 32)','(38, 43)','(48, 53)','(60, 100)']MAX_BATCH_SZ=128#模型文件目錄tf.app.flags.DEFINE_string('model_dir','','Model directory (where training data lives)')#性別和年齡都是用的這個(gè),通過(guò)參數(shù)age|gender來(lái)區(qū)分tf.app.flags.DEFINE_string('class_type','age','Classification type (age|gender)')#用cpu還是用GPU來(lái)訓(xùn)練tf.app.flags.DEFINE_string('device_id','/cpu:0','What processing unit to execute inference on')tf.app.flags.DEFINE_string('filename','','File (Image) or File list (Text/No header TSV) to process')tf.app.flags.DEFINE_string('target','','CSV file containing the filename processed along with best guess and score')#檢查點(diǎn)tf.app.flags.DEFINE_string('checkpoint','checkpoint','Checkpoint basename')tf.app.flags.DEFINE_string('model_type','default','Type of convnet')tf.app.flags.DEFINE_string('requested_step','','Within the model directory, a requested step to restore e.g., 9000')tf.app.flags.DEFINE_boolean('single_look',False,'single look at the image or multiple crops')tf.app.flags.DEFINE_string('face_detection_model','','Do frontal face detection with model specified')tf.app.flags.DEFINE_string('face_detection_type','cascade','Face detection model type (yolo_tiny|cascade)')FLAGS=tf.app.flags.FLAGSdefone_of(fname,types):returnany([fname.endswith('.'+ty)forty in types])defresolve_file(fname):ifos.path.exists(fname):returnfnameforsuffix in('.jpg','.png','.JPG','.PNG','.jpeg'):cand=fname+suffixifos.path.exists(cand):returncandreturnNonedefclassify_many_single_crop(sess,label_list,softmax_output,coder,images,image_files,writer):try:num_batches=math.ceil(len(image_files)/MAX_BATCH_SZ)pg=ProgressBar(num_batches)forj inrange(num_batches):start_offset=j*MAX_BATCH_SZend_offset=min((j+1)*MAX_BATCH_SZ,len(image_files))batch_image_files=image_files[start_offset:end_offset]print(start_offset,end_offset,len(batch_image_files))image_batch=make_multi_image_batch(batch_image_files,coder)batch_results=sess.run(softmax_output,feed_dict={images:image_batch.eval()})batch_sz=batch_results.shape[0]fori inrange(batch_sz):output_i=batch_results[i]best_i=np.argmax(output_i)best_choice=(label_list[best_i],output_i[best_i])print('Guess @ 1 %s, prob = %.2f'%best_choice)ifwriter is not None:f=batch_image_files[i]writer.writerow((f,best_choice[0],'%.2f'%best_choice[1]))pg.update()pg.done()except Exception as e:print(e)print('Failed to run all images')defclassify_one_multi_crop(sess,label_list,softmax_output,coder,images,image_file,writer):try:print('Running file %s'%image_file)image_batch=make_multi_crop_batch(image_file,coder)batch_results=sess.run(softmax_output,feed_dict={images:image_batch.eval()})output=batch_results[0]batch_sz=batch_results.shape[0]fori inrange(1,batch_sz):output=output+batch_results[i]output/=batch_szbest=np.argmax(output)best_choice=(label_list[best],output[best])print('Guess @ 1 %s, prob = %.2f'%best_choice)nlabels=len(label_list)ifnlabels>2:output[best]=0second_best=np.argmax(output)print('Guess @ 2 %s, prob = %.2f'%(label_list[second_best],output[second_best]))ifwriter is not None:writer.writerow((image_file,best_choice[0],'%.2f'%best_choice[1]))except Exception as e:print(e)print('Failed to run image %s '%image_file)deflist_images(srcfile):withopen(srcfile,'r')as csvfile:delim=','ifsrcfile.endswith('.csv')else'\t'reader=csv.reader(csvfile,delimiter=delim)ifsrcfile.endswith('.csv')or srcfile.endswith('.tsv'):print('skipping header')_=next(reader)return[row[0]forrow in reader]defmain(argv=None):# pylint:disable=unused-argumentfiles=[]print("target %s"%FLAGS.target)ifFLAGS.face_detection_model:print('Using face detector (%s) %s'%(FLAGS.face_detection_type,FLAGS.face_detection_model))face_detect=face_detection_model(FLAGS.face_detection_type,FLAGS.face_detection_model)face_files,rectangles=face_detect.run(FLAGS.filename)print(face_files)files+=face_filesconfig=tf.ConfigProto(allow_soft_placement=True)with tf.Session(config=config)as sess:label_list=AGE_LISTifFLAGS.class_type=='age'elseGENDER_LISTnlabels=len(label_list)print('Executing on %s'%FLAGS.device_id)model_fn=select_model(FLAGS.model_type)with tf.device(FLAGS.device_id):images=tf.placeholder(tf.float32,[None,RESIZE_FINAL,RESIZE_FINAL,3])logits=model_fn(nlabels,images,1,False)init=tf.global_variables_initializer()requested_step=FLAGS.requested_stepifFLAGS.requested_stepelseNonecheckpoint_path='%s'%(FLAGS.model_dir)model_checkpoint_path,global_step=get_checkpoint(checkpoint_path,requested_step,FLAGS.checkpoint)saver=tf.train.Saver()saver.restore(sess,model_checkpoint_path)softmax_output=tf.nn.softmax(logits)coder=ImageCoder()# Support a batch mode if no face detection modeliflen(files)==0:if(os.path.isdir(FLAGS.filename)):forrelpath in os.listdir(FLAGS.filename):abspath=os.path.join(FLAGS.filename,relpath)ifos.path.isfile(abspath)andany([abspath.endswith('.'+ty)forty in('jpg','png','JPG','PNG','jpeg')]):print(abspath)files.append(abspath)else:files.append(FLAGS.filename)# If it happens to be a list file, read the list and clobber the filesifany([FLAGS.filename.endswith('.'+ty)forty in('csv','tsv','txt')]):files=list_images(FLAGS.filename)writer=Noneoutput=NoneifFLAGS.target:print('Creating output file %s'%FLAGS.target)output=open(FLAGS.target,'w')writer=csv.writer(output)writer.writerow(('file','label','score'))image_files=list(filter(lambda x:x is not None,[resolve_file(f)forf in files]))print(image_files)ifFLAGS.single_look:classify_many_single_crop(sess,label_list,softmax_output,coder,images,image_files,writer)else:forimage_file in image_files:classify_one_multi_crop(sess,label_list,softmax_output,coder,images,image_file,writer)ifoutput is not None:output.close()if__name__=='__main__':tf.app.run()
年齡識(shí)別我們對(duì)外提供一個(gè)Web接口,guessAgeWeb_chongdianleme.py如代碼8.6所示:
【代碼8.6】 guessAgeWeb_chongdianleme.py
代碼如下(示例):
from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionfrom datetime import datetimeimport mathimport timefrom data import inputsimport numpy as npimport tensorflow as tffrom model import select_model,get_checkpointfrom utils import*import osimport csv#pip3 install flaskfrom flask import Flaskfrom flask import requestimport urllib# pip3 install requestsimport requests,urllib.requestfrom scipy import miscimport argparseimport facenetimport align.detect_faceimport jsonRESIZE_FINAL=227#性別有兩個(gè)GENDER_LIST=['M','F']#年齡是分段的,可以看成多分類任務(wù)AGE_LIST=['(0, 2)','(4, 6)','(8, 12)','(15, 20)','(25, 32)','(38, 43)','(48, 53)','(60, 100)']MAX_BATCH_SZ=128defone_of(fname,types):returnany([fname.endswith('.'+ty)forty in types])defresolve_file(fname):ifos.path.exists(fname):returnfnameforsuffix in('.jpg','.png','.JPG','.PNG','.jpeg'):cand=fname+suffixifos.path.exists(cand):returncandreturnNonedeflist_images(srcfile):withopen(srcfile,'r')as csvfile:delim=','ifsrcfile.endswith('.csv')else'\t'reader=csv.reader(csvfile,delimiter=delim)ifsrcfile.endswith('.csv')or srcfile.endswith('.tsv'):print('skipping header')_=next(reader)return[row[0]forrow in reader]# 初始化class_type='age'device_id="/cpu:0"model_type="inception"requested_step=""#模型文件目錄model_dir="/home/hadoop/chongdianleme/nianling/22801/inception/22801"checkpoint="checkpoint"config=tf.ConfigProto(allow_soft_placement=True)sess=tf.Session(config=config)with sess.as_default():label_list=AGE_LISTifclass_type=='age'elseGENDER_LISTnlabels=len(label_list)model_fn=select_model(model_type)images=tf.placeholder(tf.float32,[None,RESIZE_FINAL,RESIZE_FINAL,3])logits=model_fn(nlabels,images,1,False)init=tf.global_variables_initializer()requested_step=requested_stepifrequested_stepelseNonecheckpoint_path='%s'%(model_dir)model_checkpoint_path,global_step=get_checkpoint(checkpoint_path,requested_step,checkpoint)saver=tf.train.Saver()saver.restore(sess,model_checkpoint_path)softmax_output=tf.nn.softmax(logits)coder=ImageCoder()def_is_png(filename):return'.png'in filenameapp=Flask(__name__)@app.route('/predictAge',methods=['GET','POST'])defprediction():start=time.time()imageUrl=request.values.get("imageUrl")#用戶信息device=request.values.get("device")userid=request.values.get("userid")urlType=request.values.get("urlType")imageType=request.values.get("imageType")files=[]#支持本地圖片和網(wǎng)絡(luò)圖片ifurlType=="local":filename=imageUrlelse:baseImageName=os.path.basename(imageUrl)filename="/home/hadoop/chongdianleme/ageimage/%s"%baseImageNamefilename=filename+imageTypeurllib.request.urlretrieve(imageUrl,filename)#通過(guò)我們前面講的FaceNet里的人臉檢測(cè)和對(duì)齊的http接口對(duì)圖片進(jìn)行處理,這樣識(shí)別的年齡更精準(zhǔn)url="http://172.17.100.216:8816/detectAndAlignedService"body_value={"image_file":filename,"alignedImage_files":filename}data_urlencode=urllib.parse.urlencode(body_value).encode(encoding='UTF8')request2=urllib.request.Request(url,data_urlencode)#調(diào)用接口resultJson=urllib.request.urlopen(request2).read().decode('UTF-8')#解析json格式的數(shù)據(jù)o=json.loads(resultJson)ts=o["times"]i=o["i"]newFileName=filename.replace(".","_0_.")files.append(newFileName)image_files=list(filter(lambda x:x is not None,[resolve_file(f)forf in files]))print(image_files)finalAge=0avgBest=0.00bestProb=0.00avgSecond=0.00secondProb=0.00forimage_file in image_files:try:print('Running file %s'%image_file)#image_batch = make_multi_crop_batch(image_file, coder)#startwith tf.gfile.FastGFile(filename,'rb')as f:image_data=f.read()# Convert any PNG to JPEG's for consistency.if_is_png(filename):print('Converting PNG to JPEG for %s'%filename)image_data=coder.png_to_jpeg(image_data)image=coder.decode_jpeg(image_data)crops=[]print('Running multi-cropped image')h=image.shape[0]w=image.shape[1]hl=h-RESIZE_FINALwl=w-RESIZE_FINALcrop=tf.image.resize_images(image,(RESIZE_FINAL,RESIZE_FINAL))crops.append(standardize_image(crop))crops.append(tf.image.flip_left_right(crop))corners=[(0,0),(0,wl),(hl,0),(hl,wl),(int(hl/2),int(wl/2))]forcorner in corners:ch,cw=cornercropped=tf.image.crop_to_bounding_box(image,ch,cw,RESIZE_FINAL,RESIZE_FINAL)crops.append(standardize_image(cropped))flipped=tf.image.flip_left_right(cropped)crops.append(standardize_image(flipped))image_batch=tf.stack(crops)#endbatch_results=sess.run(softmax_output,feed_dict={images:image_batch.eval(session=sess)})output=batch_results[0]batch_sz=batch_results.shape[0]fori inrange(1,batch_sz):output=output+batch_results[i]output/=batch_szbest=np.argmax(output)ageClass=label_list[best]#(25,32)bestAgeArr=ageClass.replace(" ","").replace("(","").replace(")","").split(",")#AGE_LIST = ['(0, 2)', '(4, 6)', '(8, 12)', '(15, 20)', '(25, 32)', '(38, 43)', '(48, 53)', '(60, 100)']#因?yàn)橛?xùn)練的模型用的是開(kāi)源項(xiàng)目訓(xùn)練好的,是拿外國(guó)人的人臉數(shù)據(jù)訓(xùn)練,# 這樣用來(lái)預(yù)測(cè)我們中國(guó)人的年齡會(huì)有一些差異,最好的方式是拿我們中國(guó)人自己的人臉年齡數(shù)據(jù)做訓(xùn)練,這樣預(yù)測(cè)才會(huì)更好。# 所以針對(duì)外國(guó)人訓(xùn)練數(shù)據(jù)預(yù)測(cè)我們中國(guó)人需要對(duì)年齡做一些經(jīng)驗(yàn)上的特殊處理ifint(bestAgeArr[1])==53:avgBest=56elifint(bestAgeArr[1])==43:avgBest=45elifint(bestAgeArr[1])==20:avgBest=22.66elifint(bestAgeArr[1])==6:avgBest=6.66else:avgBest=(int(bestAgeArr[0])+int(bestAgeArr[1]))/1.66bestProb=output[best]best_choice=(label_list[best],output[best])print('Guess @ 1 %s, prob = %.2f'%best_choice)nlabels=len(label_list)ifnlabels>2:output[best]=0second_best=np.argmax(output)secondAgeClass=label_list[second_best]#(25,32)secondAgeArr=secondAgeClass.replace(" ","").replace("(","").replace(")","").split(",")ifint(secondAgeArr[1])==53:avgSecond=56elifint(secondAgeArr[1])==43:avgSecond=45elifint(secondAgeArr[1])==20:avgSecond=22.66elifint(secondAgeArr[1])==6:avgSecond=6.66else:avgSecond=(int(secondAgeArr[0])+int(secondAgeArr[1]))/1.66secondProb=output[second_best]print('Guess @ 2 %s, prob = %.2f'%(label_list[second_best],output[second_best]))except Exception as e:import tracebacktraceback.print_exc()print('Failed to run image %s '%image_file)ifavgSecond>0:#基于加權(quán)平均法計(jì)算最終的合適的年齡finalAge=(avgBest*bestProb+avgSecond*secondProb)/(bestProb+secondProb)else:finalAge=avgBestprint("finalAge %s "%finalAge)end=time.time()times=str(end-start)#返回年齡等json格式數(shù)據(jù)result={"finalAge":finalAge,"times":times}out=json.dumps(result,ensure_ascii=False)print("out={0}".format(out))returnoutif__name__=='__main__':#指定ip地址和端口號(hào)app.run(host='172.17.100.216',port=8818)然后我們看下怎么部署和啟動(dòng)基于Flask的年齡識(shí)別服務(wù),腳本代碼如下所示:#創(chuàng)建shell腳本文件vim guessAgeService.sh#輸入:python3 guessAgeWeb_chongdianleme.py#然后:wq保存#對(duì)guessAgeService.sh腳本授權(quán)可執(zhí)行權(quán)限sudo chmod755guessAgeService.sh#然后再創(chuàng)建一個(gè)以后臺(tái)方式運(yùn)行的shell腳本:vim nohupguessAgeService.sh#輸入:nohup/home/hadoop/chongdianleme/guessAgeService.sh>guessAge.log2>&1&#然后:wq保存#同樣對(duì)nohupguessAgeService.sh腳本授權(quán)可執(zhí)行權(quán)限sudo chmod755nohupguessAgeService.sh##2.讀入數(shù)據(jù)<font color=#999AAA>代碼如下(示例):```cdata=pd.read_csv('https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')print(data.head())
#最后運(yùn)行sh nohupguessAgeService.sh腳本啟動(dòng)基于flask的人臉識(shí)別比對(duì)服務(wù)接口。
啟動(dòng)完成后,就可以在瀏覽器地址里輸入url訪問(wèn)我們的服務(wù)了。這個(gè)http接口聲明了同時(shí)支持get和post訪問(wèn),我們?cè)跒g覽器里輸入地址就可以直接訪問(wèn)了。
http://172.17.100.216:8818/predictAge?imageUrl=/home/hadoop/chongdianleme/age/luhan2.jpg&urlType=local&imageType=jpg
這個(gè)就是一個(gè)接口服務(wù),其他系統(tǒng)或者php、java web網(wǎng)站都可以調(diào)用這個(gè)接口,輸入要預(yù)測(cè)imageUrl人臉圖片路徑,urlType是同時(shí)支持本地圖片和網(wǎng)絡(luò)圖片鏈接的設(shè)置,返回人臉年齡json格式數(shù)據(jù)。
除了基于TensorFlow深度學(xué)習(xí)人臉識(shí)別源碼級(jí)項(xiàng)目實(shí)戰(zhàn)?https://ke.qq.com/course/2554709?flowToken=1028991
其它深度學(xué)習(xí)框架也有不錯(cuò)的開(kāi)源實(shí)現(xiàn),比如MXNet,后面請(qǐng)大家關(guān)注充電了么app,課程,微信群,更多內(nèi)容請(qǐng)看新書(shū)《分布式機(jī)器學(xué)習(xí)實(shí)戰(zhàn)(人工智能科學(xué)與技術(shù)叢書(shū))》
【新書(shū)介紹】
《分布式機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》(人工智能科學(xué)與技術(shù)叢書(shū))【陳敬雷編著】【清華大學(xué)出版社】https://item.jd.com/12743009.html
新書(shū)特色:深入淺出,逐步講解分布式機(jī)器學(xué)習(xí)的框架及應(yīng)用配套個(gè)性化推薦算法系統(tǒng)、人臉識(shí)別、對(duì)話機(jī)器人等實(shí)戰(zhàn)項(xiàng)目
【新書(shū)介紹視頻】
分布式機(jī)器學(xué)習(xí)實(shí)戰(zhàn)(人工智能科學(xué)與技術(shù)叢書(shū))新書(shū)【陳敬雷】https://ke.qq.com/course/3067704?flowToken=1029963
視頻特色:重點(diǎn)對(duì)新書(shū)進(jìn)行介紹,最新前沿技術(shù)熱點(diǎn)剖析,技術(shù)職業(yè)規(guī)劃建議!聽(tīng)完此課你對(duì)人工智能領(lǐng)域?qū)⒂幸粋€(gè)嶄新的技術(shù)視野!職業(yè)發(fā)展也將有更加清晰的認(rèn)識(shí)!
【精品課程】
《分布式機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》大數(shù)據(jù)人工智能AI專家級(jí)精品課程https://ke.qq.com/course/393750?flowToken=1028919
【免費(fèi)體驗(yàn)視頻】
人工智能百萬(wàn)年薪成長(zhǎng)路線/從Python到最新熱點(diǎn)技術(shù)?https://ke.qq.com/course/package/31251?flowToken=1029962
從Python編程零基礎(chǔ)小白入門(mén)到人工智能高級(jí)實(shí)戰(zhàn)系列課
https://ke.qq.com/course/package/29782?flowToken=1028733
視頻特色:本系列專家級(jí)精品課有對(duì)應(yīng)的配套書(shū)籍《分布式機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》,精品課和書(shū)籍可以互補(bǔ)式學(xué)習(xí),彼此相互補(bǔ)充,大大提高了學(xué)習(xí)效率。本系列課和書(shū)籍是以分布式機(jī)器學(xué)習(xí)為主線,并對(duì)其依賴的大數(shù)據(jù)技術(shù)做了詳細(xì)介紹,之后對(duì)目前主流的分布式機(jī)器學(xué)習(xí)框架和算法進(jìn)行重點(diǎn)講解,本系列課和書(shū)籍側(cè)重實(shí)戰(zhàn),最后講幾個(gè)工業(yè)級(jí)的系統(tǒng)實(shí)戰(zhàn)項(xiàng)目給大家。課程核心內(nèi)容有互聯(lián)網(wǎng)公司大數(shù)據(jù)和人工智能那些事、大數(shù)據(jù)算法系統(tǒng)架構(gòu)、大數(shù)據(jù)基礎(chǔ)、Python編程、Java編程、Scala編程、Docker容器、Mahout分布式機(jī)器學(xué)習(xí)平臺(tái)、Spark分布式機(jī)器學(xué)習(xí)平臺(tái)、分布式深度學(xué)習(xí)框架和神經(jīng)網(wǎng)絡(luò)算法、自然語(yǔ)言處理算法、工業(yè)級(jí)完整系統(tǒng)實(shí)戰(zhàn)(推薦算法系統(tǒng)實(shí)戰(zhàn)、人臉識(shí)別實(shí)戰(zhàn)、對(duì)話機(jī)器人實(shí)戰(zhàn))、就業(yè)/面試技巧/職業(yè)生涯規(guī)劃/職業(yè)晉升指導(dǎo)等內(nèi)容。
【充電了么App】
本書(shū)在充電了么App里有對(duì)應(yīng)的視頻課程,更多學(xué)習(xí)資源也可以通過(guò)下載充電了么App客戶端,也可以從各大應(yīng)用商店里搜索“充電了么”自行下載。充電了么是專注上班族職業(yè)技能提升的在線教育平臺(tái)。這里有海量免費(fèi)課程,在這里你可以學(xué)習(xí)牛人的實(shí)際工作經(jīng)驗(yàn),也能夠大幅提升職業(yè)技能,提高工作效率,帶來(lái)經(jīng)濟(jì)效益!除了陳敬雷老師的課以外,還有上千萬(wàn)好課免費(fèi)分享。全都在充電了么App上。充電了么APP是專注上班族職業(yè)培訓(xùn)充電學(xué)習(xí)的在線教育平臺(tái)。各大安卓商店和蘋(píng)果App Store搜索“充電了么”即可下載。按照下圖輸入網(wǎng)址也可以下載哦~
充電了么官網(wǎng):http://www.chongdianleme.com/
充電了么App官網(wǎng)下載地址:https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app
功能特色如下:
【全行業(yè)職位】 - 專注職場(chǎng)上班族職業(yè)技能提升
覆蓋所有行業(yè)和職位,不管你是上班族,高管,還是創(chuàng)業(yè)都有你要學(xué)習(xí)的視頻和文章。其中大數(shù)據(jù)智能AI、區(qū)塊鏈、深度學(xué)習(xí)是互聯(lián)網(wǎng)一線工業(yè)級(jí)的實(shí)戰(zhàn)經(jīng)驗(yàn)。
除了專業(yè)技能學(xué)習(xí),還有通用職場(chǎng)技能,比如企業(yè)管理、股權(quán)激勵(lì)和設(shè)計(jì)、職業(yè)生涯規(guī)劃、社交禮儀、溝通技巧、演講技巧、開(kāi)會(huì)技巧、發(fā)郵件技巧、工作壓力如何放松、人脈關(guān)系等等,全方位提高你的專業(yè)水平和整體素質(zhì)。
【牛人課堂】 - 學(xué)習(xí)牛人的工作經(jīng)驗(yàn)
1.智能個(gè)性化引擎:
海量視頻課程,覆蓋所有行業(yè)、所有職位,通過(guò)不同行業(yè)職位的技能詞偏好挖掘分析,智能匹配你目前職位最感興趣的技能學(xué)習(xí)課程。
2.聽(tīng)課全網(wǎng)搜索
輸入關(guān)鍵詞搜索海量視頻課程,應(yīng)有盡有,總有適合你的課程。
3.聽(tīng)課播放詳情
視頻播放詳情,除了播放當(dāng)前視頻,更有相關(guān)視頻課程和文章閱讀,對(duì)某個(gè)技能知識(shí)點(diǎn)強(qiáng)化,讓你輕松成為某個(gè)領(lǐng)域的資深專家。
【精品閱讀】 - 技能文章興趣閱讀
1.個(gè)性化閱讀引擎:
千萬(wàn)級(jí)文章閱讀,覆蓋所有行業(yè)、所有職位,通過(guò)不同行業(yè)職位的技能詞偏好挖掘分析,智能匹配你目前職位最感興趣的技能學(xué)習(xí)文章。
2.閱讀全網(wǎng)搜索
輸入關(guān)鍵詞搜索海量文章閱讀,應(yīng)有盡有,總有你感興趣的技能學(xué)習(xí)文章。
【機(jī)器人老師】 - 個(gè)人提升趣味學(xué)習(xí)
基于搜索引擎和智能深度學(xué)習(xí)訓(xùn)練,為您打造更懂你的機(jī)器人老師,用自然語(yǔ)言和機(jī)器人老師聊天學(xué)習(xí),寓教于樂(lè),高效學(xué)習(xí),快樂(lè)人生。
【精短課程】 - 高效學(xué)習(xí)知識(shí)
海量精短牛人課程,滿足你的時(shí)間碎片化學(xué)習(xí),快速提高某個(gè)技能知識(shí)點(diǎn)。