基於Python實現自動刷抖音,進行人臉識別,不是小姐姐自動划走下一個!

来源:https://www.cnblogs.com/hahaa/archive/2023/03/08/17195847.html
-Advertisement-
Play Games

昨天木子問我能不能做自動刷某音短視頻,還要自動刷小哥哥,不是小哥哥就划走。 我心想,這女人真麻煩,怎麼這麼多事。 不好好工作天天想著小哥哥! 為了不得罪她,當時我就先答應了下來,然而實際上我把小哥哥變成了小姐姐,刷什麼小哥哥,多沒品味! 好了,話不多說,我們直接上代碼! 代碼實戰 首先導入需要使用的 ...


昨天木子問我能不能做自動刷某音短視頻,還要自動刷小哥哥,不是小哥哥就划走。

我心想,這女人真麻煩,怎麼這麼多事。

不好好工作天天想著小哥哥!

為了不得罪她,當時我就先答應了下來,然而實際上我把小哥哥變成了小姐姐,刷什麼小哥哥,多沒品味!

好了,話不多說,我們直接上代碼!

代碼實戰

首先導入需要使用的模塊

import base64
import urllib
import json
import requests
import sys

 

獲取介面

獲取 access_token 有效期一般有一個月

client_id = api_key
client_secret = secret_key
# 完整代碼我都放在這個群了 872937351 
# 直接加它領取
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

 

調用人臉識別的介面,返回識別到的人臉列表。

headers ={
    'Content-Type': 'application/json; charset=UTF-8'
}

if pic_type == TYPE_IMAGE_NETWORK:
    image = pic_url
    image_type = 'URL'
else:
    with open(pic_url, 'rb') as file:
        image = base64.b64encode(file.read())
    image_type = 'BASE64'

post_data ={
    'image': image,
    'image_type': image_type,
    'face_field': 'facetype,gender,age,beauty',  # expression,faceshape,landmark,race,quality,glasses
    'max_face_num': 2
}

response_fi = requests.post(url_fi, headers=headers, data=post_data)
json_fi_result = json.loads(response_fi.text)

 

如果人臉識別成功,返回人臉列表,否則返回None

if not json_fi_result or json_fi_result['error_msg'] != 'SUCCESS':
    return None
else:
    return json_fi_result['result']['face_list']

 

人臉識別,返回人臉列表。

def parse_face_pic(pic_url, pic_type, access_token):
    url_fi = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=' + access_token

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

    if not json_faces:
        return None
    else:
        return json_faces

 

解析人臉識別結果,判斷顏值是否達標。

條件:性別女,顏值大於等於 70

def analysis_face(face_list):
    # 是否能找到漂亮小姐姐
    find_plxjj = False
    if face_list:
        for face in face_list:
            # 判斷是男、女
            if face['gender']['type'] == 'female':
                age = face['age']
                beauty = face['beauty']

                if beauty >= 70:
                    print('發現一個 ' + str(age) + ' 歲的美女,顏值為:%d,滿足條件!' % beauty)
                    find_plxjj = True
                    break
                else:
                    print('發現一個 ' + str(age) + ' 歲的女生,顏值為:%d,不及格,繼續~' % beauty)
                    continue

    return find_plxjj

 

App的應用包名和初始Activity

package_name = 'com.ss.android.ugc.aweme'
activity_name = 'com.ss.android.ugc.aweme.splash.SplashActivity'

 

打開 Android 應用

def start_my_app(package_name, activity_name):

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

 

保存截圖以及點贊

def save_video_met(screen_name, find_girl_num):

    img = Image.open(screen_name).convert('RGB')
    img.save("漂亮的小姐姐/DYGirl_%d.jpg" % find_girl_num)
    os.system("adb shell input tap 666 800")

 

向上劃屏幕,播放下一段視頻

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

 

截圖並修剪保存

def get_screen_shot_part_img(image_name):
    # 截圖
    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')
    # 圖片的原寬、高
    w, h = img.size
    # 截取部分,去掉其頭像、其他內容雜亂元素
    img = img.crop((0, 400, 1200, 2750))
    img.thumbnail((int(w / 1.5), int(h / 1.5)))
    # 保存到本地
    img.save(image_name)
    return image_name

 

人臉識別時長、次數

設置一條視頻最長的識別時間,要是墨跡 10 秒還不露臉,也不管她了,直接下一個。

access_token = get_access_token()
# 識別時長
RECOGNITE_TOTAL_TIME = 10
# 識別次數
recognite_count = 0

 

視頻識別

start_my_app(package_name, activity_name)
time.sleep(3)
print("開始播放視頻~")
find_girl_num = 0
# 對當前視頻截圖去人臉識別
while True:
    # 開始識別的時間
    recognite_time_start = datetime.datetime.now()
    # 識別次數
    recognite_count = 1
    # 迴圈地去刷抖音
    while True:
        # 獲取截圖
        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次識別結束後的時間
        recognite_time_end = datetime.datetime.now()
        # 這是一個美女
        if recognite_result:
            find_girl_num += 1
            save_video_met(screen_name, find_girl_num)
            print("已經發現 %d 個漂亮小姐姐" % find_girl_num)
            break
        else:
            if (recognite_time_end - recognite_time_start).seconds < RECOGNITE_TOTAL_TIME:
                continue
            else:
                print('跳過!!!!只想刷美女視頻')
                # 跳出裡層迴圈
                break

 

刪除臨時文件

shutil.rmtree('./images')
time.sleep(0.05)
os.mkdir('./images')

 

播放下一條視頻

print('==' * 30)
time.sleep(1)
print('準備播放下一個視頻~')
play_next_video()
import random
time.sleep(random.uniform(0,1))

 

最後

好了,今天的分享就到這裡結束了!

大家覺得有用的話可以來個免費的點贊+收藏+關註,防止下次我悄悄更新了好東西卻不知道!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、文件系統存儲 電腦剛開始出現的時候,那時候沒有硬碟,只有記憶體,數據不會進行存儲,一般只用於科技計算,計算完輸出結果後,程式就撤出記憶體了。後來隨著技術發展,有了硬碟、文件,在文件的基礎上有了文件系統。文件系統可以滿足數據存放和查找的需求。 文件系統作為資料庫用了一段時間,當數據越來越多、規模越來 ...
  • 這篇文章描述如何使用消息隊列中的事務消息機制實現分散式事務。事務消息適用於需要非同步更新數據,並且對數據實時性要求不太高的場景。 ...
  • ##一、通訊錄準備 #####1. 通訊錄信息的準備 #####2. 通訊錄功能的框架 #####3. 文件安排 ##二、實現通訊錄的功能 #####1. 添加功能 #####2. 刪除功能 #####3. 展示功能 #####4. 更改功能 #####5. 查找功能 #####6. 排序功能 ## ...
  • C++中的仿函數(function object)是一個重載了函數調用運算符(operator())的類或結構體,在使用時可以像函數一樣調用。通過仿函數,C++程式員可以更加靈活地實現自己的演算法。 ...
  • 緩存的重要性 簡而言之,緩存的原理就是利用空間來換取時間。通過將數據存到訪問速度更快的空間里以便下一次訪問時直接從空間里獲取,從而節省時間。 我們以CPU的緩存體係為例: CPU緩存體系是多層級的。分成了CPU -> L1 -> L2 -> L3 -> 主存。我們可以得到以下啟示。 越頻繁使用的數據 ...
  • 前言: Servlet 容器初始化 Servlet 時,會為這個 Servlet 創建一個 ServletConfig 對象,並將 ServletConfig 對象作為參數傳遞給 Servlet 。通過 ServletConfig 對象即可獲得當前 Servlet 的初始化參數信息。一個 Web 應 ...
  • Tread多線程 什麼是線程? 線程(Thread)是一個程式內部的一條執行流程。 程式中如果只有一條執行流程,那這個程式就是單線程的程式。 多線程是什麼? 多線程是指從軟硬體上實現的多條執行流程的技術(多條線程由cpu負責調度執行)。 多線程的創建方式 方式一:繼承Thread ①定義一個子類My ...
  • python的基本認識 初識python: python是一種跨平臺的、開源的、免費的、解釋型的高級編程語言; python的應用領域十分廣泛、如web編程、圖像處理、黑客編程、網路爬蟲和科學計算等; python學習簡單、開發速度快、節省時間和精力。 python具有豐富和強大的庫,能夠把用其他語 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...