项目印记
预测未来的最好办法,就是把它创造出来。--艾伦.凯(美)
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}")