<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把抖音上好看的小姐姐都下載了!

          共 14499字,需瀏覽 29分鐘

           ·

          2021-12-20 02:34



          1

          目 標 場 景


          相信大家平時刷抖音短視頻的時候,看到顏值高的小姐姐,都有隨手點贊關注的習慣。


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


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


          2

          準 備 工 作


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


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


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


          # 安裝依賴pip3 install pocoui


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


          這里需要進行百度云后臺,注冊一個人臉識別的應用,獲取到一組 API Key 和 Secret Key」值。

          https://console.bce.baidu.com



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


          appid = '你注冊應用的appid'
          api_key = '你注冊應用的ak'
          secret_key = '你注冊應用的sk'

          def get_access_token():
              """
               其關access_token有效期一般有一個月
              """

              # 此變量賦值成自己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"}

              # 請求獲取到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

          編  寫  腳  本


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


          # 抖音App的應用包名和初始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):
              """
              打開應用
              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))


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


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


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

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

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

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

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

              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):
              """
              人臉識別
              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('未識別到人臉')
                  return None
              else:
                  # 返回所有的人臉
                  return json_faces


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


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

              # 是否能找到高顏值的美女
              find_belle = False
              if face_list:
                  print('一共識別到%d張人臉,下面開始識別是否有美女~' % 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('圖片中沒有發(fā)現(xiàn)人臉.')

              return find_belle


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


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


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

          # 對當前視頻截圖去人臉識別
          while True:
            # 獲取截圖
            print('開始第%d次截圖' % recognite_count)

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

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

            recognite_count += 1

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

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


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



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


          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")


          另外,由于下載視頻的過程是一個耗時操作,在下載進度對話框還未消失之前,需要做一個模擬等待」的操作。


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


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

                  # 當前頁面UI樹元素信息
                  # 注意:保存的時候可能會獲取元素異常,這里需要拋出,并終止循環(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


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


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


          def play_next_video():
              """
              下一個視頻
              從下往上滑動
              :return:
              """

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


          在腳本一條條刷視頻的過程中,可能會遇到一下廣告,我們需要對這類視頻進行過濾。


          def is_a_ad():
              """
              判斷的當前頁面上是否是一條廣告
              :return:
              """

              element = Element()
              ad_tips = ['去玩一下''去體驗''立即下載']

              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é) 論


          運行上面的腳本,會自動打開抖音,對每一條小視頻多次進行人臉識別,直到識別到顏值高的小姐姐,保存視頻到本地,然后繼續(xù)刷下一條短視頻。



          我已經(jīng)將全部源碼上傳到后臺上,公眾號回復「 小助手 」,找他獲取,暗號:小姐姐,即可獲得。

          如果你覺得文章還不錯,請大家點贊分享下。你的肯定是我最大的鼓勵和支持。




          推薦閱讀:

          入門: 最全的零基礎學Python的問題  | 零基礎學了8個月的Python  | 實戰(zhàn)項目 |學Python就是這條捷徑


          干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 |   從萬眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個海量小姐姐素描圖 |碟中諜這么火,我用機器學習做個迷你推薦系統(tǒng)電影


          趣味:彈球游戲  | 九宮格  | 漂亮的花 | 兩百行Python《天天酷跑》游戲!


          AI: 會做詩的機器人 | 給圖片上色 | 預測收入 | 碟中諜這么火,我用機器學習做個迷你推薦系統(tǒng)電影


          小工具: Pdf轉(zhuǎn)Word,輕松搞定表格和水??! | 一鍵把html網(wǎng)頁保存為pdf!|  再見PDF提取收費! | 用90行代碼打造最強PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換 | 制作一款釘釘?shù)蛢r機票提示器! |60行代碼做了一個語音壁紙切換器天天看小姐姐!


          年度爆款文案


          點閱讀原文,看200個Python案例!

          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  操丝袜美女的骚逼 | 青娱乐国产在线视频 | 亚洲日韩免费视频 | 2021国产精品视频 | www精品|