<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python幫你下載抖音上小姐姐的照片

          共 3317字,需瀏覽 7分鐘

           ·

          2019-12-18 23:24

          點(diǎn)擊上方“程序IT圈”,選擇“星標(biāo)”


          56f6dfdc503916161392c581d9e177a5.webp

          1

          目 標(biāo) 場(chǎng) 景


          相信大家平時(shí)刷抖音短視頻的時(shí)候,看到顏值高的小姐姐,都有隨手點(diǎn)贊關(guān)注的習(xí)慣。


          如果一條條去刷確實(shí)很耗時(shí)間,如果 Python 能幫忙篩選出顏值高的小姐姐那就省了很多事。


          本篇文章是借助百度人臉識(shí)別」API,幫我們識(shí)別出抖音上顏值高的小姐姐,然后下載到手機(jī)相冊(cè)中。


          2

          準(zhǔn) 備 工 作


          首先,項(xiàng)目需要對(duì)頁(yè)面元素進(jìn)行一些精準(zhǔn)的操作,需要提前準(zhǔn)備一部 Android 設(shè)備,激活開(kāi)發(fā)者選項(xiàng),并在開(kāi)發(fā)者選項(xiàng)中打開(kāi) USB 調(diào)試和指針位置」兩處設(shè)置。


          為了確保 adb 命令能正常使用,需要提前配置好 adb 開(kāi)發(fā)環(huán)境。


          頁(yè)面元素中的部分元素沒(méi)法利用 name 等常用屬性獲取到,可能需要獲取到完整的UI 樹(shù),再利用 Airtest 判斷是否存在某個(gè) UI 元素。


          # 安裝依賴(lài)pip3?install?pocoui


          另外,項(xiàng)目中會(huì)對(duì)視頻進(jìn)行人臉識(shí)別,獲取到出現(xiàn)的所有人臉,再進(jìn)行性別識(shí)別及顏值判斷。


          這里需要進(jìn)行百度云后臺(tái),注冊(cè)一個(gè)人臉識(shí)別的應(yīng)用,獲取到一組?API Key 和 Secret Key」值

          https://console.bce.baidu.com


          678a95629c655dcfa7afd7b07c643482.webp


          然后利用官網(wǎng)提供的 API 文檔即可獲取到access token」,由于?ak 的有效期為一個(gè)月,所以只需要初始化一次,后面就可以利用人臉識(shí)別接口進(jìn)行正常的識(shí)別了。


          appid?=?'你注冊(cè)應(yīng)用的appid'
          api_key?=?'你注冊(cè)應(yīng)用的ak'
          secret_key?=?'你注冊(cè)應(yīng)用的sk'

          def?get_access_token():
          ????"""
          ?????其中access_token有效期一般有一個(gè)月
          ????"""

          ????#?此變量賦值成自己API?Key的值
          ????client_id?=?api_key??

          ????#?此變量賦值成自己Secret?Key的值
          ????client_secret?=?secret_key??

          ????auth_url?=?'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='?+?client_id?+?'&client_secret='?+?client_secret

          ????header_dict?=?{'User-Agent':?'Mozilla/5.0?(Windows?NT?6.1;?Trident/7.0;?rv:11.0)?like?Gecko',
          ???????????????????"Content-Type":?"application/json"}

          ????#?請(qǐng)求獲取到token的接口
          ????response_at?=?requests.get(auth_url,?headers=header_dict)
          ????json_result?=?json.loads(response_at.text)
          ????access_token?=?json_result['access_token']
          ????return?access_token


          3

          編? 寫(xiě)? 腳? 本


          在上面已經(jīng)配置好了 adb 環(huán)境的情況下,可以直接借助 python 中的 os 模塊執(zhí)行 adb 命令打開(kāi)抖音 App。


          #?抖音App的應(yīng)用包名和初始Activity
          package_name?=?'com.ss.android.ugc.aweme'
          activity_name?=?'com.ss.android.ugc.aweme.splash.SplashActivity'

          def?start_my_app(package_name,?activity_name):
          ????"""
          ????打開(kāi)應(yīng)用
          ????adb?shell?am?start?-n?com.tencent.mm/.ui.LauncherUI
          ????:param?package_name:
          ????:return:
          ????"""

          ????os.popen('adb?shell?am?start?-n?%s/%s'?%?(package_name,?activity_name))


          接著,我們需要截取當(dāng)前播放視頻的截圖到本地。


          需要注意的是,抖音視頻播放界面包含視頻創(chuàng)作者頭像、BGM 創(chuàng)作者頭像等一些雜亂的元素,可能對(duì)人臉識(shí)別的結(jié)果產(chǎn)生一些誤差,所以需要對(duì)屏幕截圖之后的圖像進(jìn)行二次裁剪」處理


          def?get_screen_shot_part_img(image_name):
          ????"""
          ????獲取手機(jī)截圖的部分內(nèi)容
          ????:return:
          ????"""

          ????#?截圖
          ????os.system("adb?shell?/system/bin/screencap?-p?/sdcard/screenshot.jpg")
          ????os.system("adb?pull?/sdcard/screenshot.jpg?%s"?%?image_name)

          ????#?打開(kāi)圖片
          ????img?=?Image.open(image_name).convert('RGB')

          ????#?圖片的原寬、高(1080*2160)
          ????w,?h?=?img.size

          ????#?截取部分,去掉其頭像、其他內(nèi)容雜亂元素
          ????img?=?img.crop((0,?0,?900,?1500))

          ????img.thumbnail((int(w?/?1.5),?int(h?/?1.5)))

          ????#?保存到本地
          ????img.save(image_name)

          ????return?image_name


          現(xiàn)在可以使用百度提供的 API 獲取到上面截圖的人臉列表。


          def?parse_face_pic(pic_url,?pic_type,?access_token):
          ????"""
          ????人臉識(shí)別
          ????5秒之內(nèi)
          ????:param?pic_url:
          ????:param?pic_type:
          ????:param?access_token:
          ????:return:
          ????"""

          ????url_fi?=?'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token='?+?access_token

          ????#?調(diào)用identify_faces,獲取人臉列表
          ????json_faces?=?identify_faces(pic_url,?pic_type,?url_fi)

          ????if?not?json_faces:
          ????????print('未識(shí)別到人臉')
          ????????return?None
          ????else:
          ????????#?返回所有的人臉
          ????????return?json_faces


          從上述的人臉列表中篩選出性別為女,年齡為 18-30 歲之間,顏值超過(guò) 70 的小姐姐。


          def?analysis_face(face_list):
          ????"""
          ????分析人臉,判斷顏值是否達(dá)標(biāo)
          ????18-30之間,女,顏值大于80
          ????:param?face_list:識(shí)別的臉的列表
          ????:return:
          ????"""

          ????#?是否能找到高顏值的美女
          ????find_belle?=?False
          ????if?face_list:
          ????????print('一共識(shí)別到%d張人臉,下面開(kāi)始識(shí)別是否有美女~'?%?len(face_list))
          ????????for?face?in?face_list:
          ????????????#?判斷是男、女
          ????????????if?face['gender']['type']?==?'female':
          ????????????????age?=?face['age']
          ????????????????beauty?=?face['beauty']

          ????????????????if?18?<=?age?<=?30?and?beauty?>=?70:
          ????????????????????print('顏值為:%d,及格,滿足條件!'?%?beauty)
          ????????????????????find_belle?=?True
          ????????????????????break
          ????????????????else:
          ????????????????????print('顏值為:%d,不及格,繼續(xù)~'?%?beauty)
          ????????????????????continue
          ????????????else:
          ????????????????print('性別為男,繼續(xù)~')
          ????????????????continue
          ????else:
          ????????print('圖片中沒(méi)有發(fā)現(xiàn)人臉.')

          ????return?find_belle


          由于視頻是連續(xù)播放的,很難通過(guò)截取視頻某一幀,判斷視頻有出現(xiàn)顏值高的小姐姐。


          另外,大部分短視頻播放時(shí)長(zhǎng)為10s+,這里需要對(duì)每一個(gè)視頻多次截圖去做人臉識(shí)別,直到識(shí)別到顏值高的小姐姐。


          # 一條視頻最長(zhǎng)的識(shí)別時(shí)間RECOGNITE_TOTAL_TIME = 10?#?識(shí)別次數(shù)
          recognite_count?=?1

          #?對(duì)當(dāng)前視頻截圖去人臉識(shí)別
          while?True:
          ??#?獲取截圖
          ??print('開(kāi)始第%d次截圖'?%?recognite_count)

          ??#?截取屏幕有用的區(qū)域,過(guò)濾視頻作者的頭像、BGM作者的頭像
          ??screen_name?=?get_screen_shot_part_img('images/temp%d.jpg'?%?recognite_count)

          ??#?人臉識(shí)別
          ??recognite_result?=?analysis_face(parse_face_pic(screen_name,?TYPE_IMAGE_LOCAL,?access_token))

          ??recognite_count?+=?1

          ??#?第n次識(shí)別結(jié)束后的時(shí)間
          ??recognite_time_end?=?datetime.now()

          ??#?這一條視頻出現(xiàn)了顏值高的小姐姐
          ??if?recognite_result:
          ?????????pass
          ??else:
          ?????????print('超時(shí)?。。∵@是一條沒(méi)有吸引力的視頻!')
          ?????????#?跳出里層循環(huán)
          ?????????break


          一旦當(dāng)前播放的視頻識(shí)別出有顏值高的小姐姐,就需要模擬保存視頻到本地的操作。


          cace581aead37650ad9132a8f0868151.webp


          獲取分享保存本地」兩個(gè)按鈕的坐標(biāo)位置,依次利用 adb 執(zhí)行點(diǎn)擊操作即可下載視頻到本地。


          def?save_video_met():
          ????"""
          ????:return:
          ????"""

          ????#?分享
          ????os.system("adb?shell?input?tap?1000?1500")
          ????time.sleep(0.05)

          ????#?保存到本地
          ????os.system("adb?shell?input?tap?350?1700")


          另外,由于下載視頻的過(guò)程是一個(gè)耗時(shí)操作,在下載進(jìn)度對(duì)話框還未消失之前,需要做一個(gè)模擬等待」的操作。


          def?wait_for_download_finished(poco):
          ????"""
          ????從點(diǎn)擊下載,到下載完全
          ????:return:
          ????"""


          ????element?=?Element()
          ????while?True:
          ????????#?由于是對(duì)話框,不能利用Element類(lèi)來(lái)判斷是否存在某個(gè)元素來(lái)準(zhǔn)確處理
          ????????#?element_result?=?element.findElementByName('正在保存到本地')

          ????????#?當(dāng)前頁(yè)面UI樹(shù)元素信息
          ????????#?注意:保存的時(shí)候可能會(huì)獲取元素異常,這里需要拋出,并終止循環(huán)
          ????????#?com.netease.open.libpoco.sdk.exceptions.NodeHasBeenRemovedException:?Node?was?no?longer?alive?when?query?attribute?"visible".?Please?re-select.
          ????????try:
          ????????????ui_tree_content?=?json.dumps(poco.agent.hierarchy.dump(),?indent=4).encode('utf-8').decode('unicode_escape')
          ????????except?Exception?as?e:
          ????????????print(e)
          ????????????print('異常,按下載處理~')
          ????????????break

          ????????if?'正在保存到本地'?in?ui_tree_content:
          ????????????print('還在下載中~')
          ????????????time.sleep(0.5)
          ????????????continue
          ????????else:
          ????????????print('下載完成~')
          ????????????break


          在視頻保存到本地之后,就可以模擬向上滑動(dòng)的操作,跳到播放下一條視頻。


          循環(huán)上面的操作,即可篩選出所有顏值高的小姐姐,并保存到本地。


          def?play_next_video():
          ????"""
          ????下一個(gè)視頻
          ????從下往上滑動(dòng)
          ????:return:
          ????"""

          ????os.system("adb?shell?input?swipe?540?1300?540?500?100")


          在腳本一條條刷視頻的過(guò)程中,可能會(huì)遇到一下廣告,我們需要對(duì)這類(lèi)視頻進(jìn)行過(guò)濾。


          def?is_a_ad():
          ????"""
          ????判斷的當(dāng)前頁(yè)面上是否是一條廣告
          ????:return:
          ????"""

          ????element?=?Element()
          ????ad_tips?=?['去玩一下',?'去體驗(yàn)',?'立即下載']

          ????find_result?=?False

          ????for?ad_tip?in?ad_tips:
          ????????try:
          ????????????element_result?=?element.findElementByName(ad_tip)
          ????????????#?是一條廣告,直接跳出
          ????????????find_result?=?True
          ????????????break
          ????????except?Exception?as?e:
          ????????????find_result?=?False

          ????return?find_result


          4

          結(jié) 果 結(jié) 論


          運(yùn)行上面的腳本,會(huì)自動(dòng)打開(kāi)抖音,對(duì)每一條小視頻多次進(jìn)行人臉識(shí)別,直到識(shí)別到顏值高的小姐姐,保存視頻到本地,然后繼續(xù)刷下一條短視頻。


          beed8722e3ee7352c6a5dc3177be09d3.webp


          我已經(jīng)將全部源碼上傳到后臺(tái)上,關(guān)注本公號(hào)回復(fù)「?小姐姐?」即可獲得。

          瀏覽 23
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草成人小视频 | 欧美V亚洲V综合V国产 | A片网站在线免费观看 | 大鸡吧插逼逼视频 | 一级毛片黄色 |