项目印记

预测未来的最好办法,就是把它创造出来。--艾伦.凯(美)

python中下载巴法云图片并用人脸识别筛选(2程序)

程序一:

#此程序从巴法云某主题下载图片,从某个时间下载直到此刻的所有图片。还需修改图片以时间命名代码,仅需更改58行为time就可以实现

import requests

import os

import time

from datetime import datetime, timedelta

# 巴法云API接口地址

API_URL = "https://apis.bemfa.com/vb/api/v1/imagesTopicList"

# 用户私钥,需要在巴法云控制台获取

OPEN_ID = "a4d032a9028947978dd140e65323d18a"

# 图片主题

TOPIC_ID = "Aitest"

# 本地保存图片的文件夹路径

SAVE_DIR = "path_to_save_images"

# 确保保存图片的文件夹存在

if not os.path.exists(SAVE_DIR):

    os.makedirs(SAVE_DIR)

# 指定的初始时间

start_datetime = datetime(2025, 1, 1, 11, 50, 5)

# 当前时间

now_datetime =  datetime.now()#datetime(2025, 1, 1, 10, 40, 5)

# 每次增加的时间(4分钟)调整为3.5使下载的图片连续

time增量 = timedelta(minutes=3.5)

# 初始化time参数

time_param = start_datetime

# 请求参数

params = {

    'openID': OPEN_ID,

    'topicID': TOPIC_ID,

    'pageSize': 24,  # 每页请求的图片数量

}

# 发送GET请求获取图片列表

def get_images(params, page=1):

    total_images = 0  # 用于统计图片总数

    global time_param  # 声明time_param为全局变量

    while time_param < now_datetime:

        params['time'] = time_param.strftime('%Y-%m-%d %H:%M:%S')  # 格式化time参数

        response = requests.get(API_URL, params=params)

        if response.status_code == 200:

            data = response.json()

            if data['code'] == 0:  # 检查API返回码是否为0,表示成功

                images = data['data']['array']

                if images:

                    total_images += len(images)  # 累加当前页的图片数量

                    for image in images:

                        url = image['url']

                        filename = os.path.join(SAVE_DIR, str(image['time']) + '.jpg')  # 使用图片ID作为文件名

                        try:

                            # 发送GET请求下载图片

                            img_response = requests.get(url)

                            if img_response.status_code == 200:

                                # 保存图片到本地文件夹

                                with open(filename, 'wb') as f:

                                    f.write(img_response.content)

                                print(f"Image saved: {filename}")

                            else:

                                print(f"Failed to download image from {url}")

                        except Exception as e:

                            print(f"An error occurred while downloading {url}: {e}")

                    page += 1  # 准备下一页的请求

                else:

                    break  # 如果没有图片了,退出循环

            else:

                print(f"Error: {data['msg']}")

                break  # 出现错误,退出循环

        else:

            print(f"Failed to fetch data, status code: {response.status_code}")

            break  # 请求失败,退出循环

        time_param += time增量  # 递增time参数

    return total_images

# 主程序

if __name__ == "__main__":

    total_images = get_images(params)

    print(f"Total number of images downloaded: {total_images}")

 

程序二:

#删除本地文件夹中不能识别人脸的图片

import cv2

import os

# 人脸检测函数

def detect_faces(image_path):

    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

    img = cv2.imread(image_path)

    if img is not None:

        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

        return len(faces) > 0

    return False

# 要处理的文件夹路径

folder_path = 'path_to_save_images'

# 遍历文件夹中的所有图片

for filename in os.listdir(folder_path):

    if filename.lower().endswith(('.png', '.jpg', '.jpeg')):  # 检查文件扩展名

        image_path = os.path.join(folder_path, filename)

        

        # 检测图片中是否有人脸

        if not detect_faces(image_path):

            # 删除没有人脸的图片

            os.remove(image_path)

            print(f"Deleted image: {image_path} - No faces detected.")

        else:

            print(f"Faces detected in image: {image_path}")

 

问 AI(只依据本文回答)
输入你的问题,AI 只根据当前段落和全篇上下文回答。
本文批注(0)