乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      抖音上好看的小姐姐,Python給你都下載了

       AirPython 2021-10-28

      第一時(shí)間獲取 Python 技術(shù)干貨!

      閱讀文本大概需要 15 分鐘。

      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è)備,激活開發(fā)者選項(xiàng),并在開發(fā)者選項(xiàng)中打開 USB 調(diào)試和指針位置」兩處設(shè)置

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

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

      # 安裝依賴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

      然后利用官網(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():
          """
           其關(guān)access_token有效期一般有一個(gè)月
          """

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

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

          auth_url = 'https://aip./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

      編  寫  腳  本

      在上面已經(jīng)配置好了 adb 環(huán)境的情況下,可以直接借助 python 中的 os 模塊執(zhí)行 adb 命令打開抖音 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):
          """
          打開應(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)

          # 打開圖片
          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):
          """
          人臉識(shí)別
          5秒之內(nèi)
          :param pic_url:
          :param pic_type:
          :param access_token:
          :return:
          """

          url_fi = 'https://aip./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 歲之間,顏值超過 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張人臉,下面開始識(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('圖片中沒有發(fā)現(xiàn)人臉.')

          return find_belle

      由于視頻是連續(xù)播放的,很難通過截取視頻某一幀,判斷視頻有出現(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('開始第%d次截圖' % recognite_count)

        # 截取屏幕有用的區(qū)域,過濾視頻作者的頭像、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í)?。。∵@是一條沒有吸引力的視頻!')
               # 跳出里層循環(huán)
               break

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

      獲取分享保存本地」兩個(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")

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

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


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

              # 當(dāng)前頁(yè)面UI樹元素信息
              # 注意:保存的時(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")

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

      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)打開抖音,對(duì)每一條小視頻多次進(jìn)行人臉識(shí)別,直到識(shí)別到顏值高的小姐姐,保存視頻到本地,然后繼續(xù)刷下一條短視頻。

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多