当前位置: 首页 > wzjs >正文

玉林建设信息网站西宁网站seo

玉林建设信息网站,西宁网站seo,做网页原型图一张多少钱,satellite7 wordpress# 主要筛选人脸信息(比如:0 这个人的文件夹里有很多张属于0的人脸照片,但是同时又参杂一些非常模糊或者其他人的照片,那么可以通过这个方法把参杂的模糊的和其他人的人脸排序到最后,那样清理的时候就不需要到处找那些不…

# 主要筛选人脸信息(比如:0 这个人的文件夹里有很多张属于0的人脸照片,但是同时又参杂一些非常模糊或者其他人的照片,那么可以通过这个方法把参杂的模糊的和其他人的人脸排序到最后,那样清理的时候就不需要到处找那些不合格的照片)

import os
import shutilimport numpy as np
from sklearn.metrics.pairwise import euclidean_distances
from PIL import Image
import torch
import torchvision.transforms as transforms
from facenet_pytorch import InceptionResnetV1
import sqlite3
import threading# 1. 加载预训练的人脸特征提取模型
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = InceptionResnetV1(pretrained='vggface2').eval().to(device)# 2. 图像预处理
transform = transforms.Compose([transforms.Resize((160, 160)),  # FaceNet 输入尺寸transforms.ToTensor(),transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
])# 3. 提取单张图像的特征向量
def extract_feature(image_path):image = Image.open(image_path).convert('RGB')image = transform(image).unsqueeze(0).to(device)with torch.no_grad():feature = model(image).cpu().numpy().flatten()return feature# 4. 创建 SQLite 数据库
def create_database(db_path):conn = sqlite3.connect(db_path)cursor = conn.cursor()cursor.execute('''CREATE TABLE IF NOT EXISTS features (person_id TEXT,image_path TEXT,feature_vector BLOB,PRIMARY KEY (person_id, image_path))''')conn.commit()conn.close()# 5. 将特征向量保存到数据库
def save_feature_to_db(db_path, person_id, image_path, feature):conn = sqlite3.connect(db_path)cursor = conn.cursor()# 检查是否有相同的person_id 和 image_path 存在 (目的是为例防止程序中断 后 又重新运行 数据插入冲突导致报错)cursor.execute("""SELECT COUNT(*) FROM featuresWHERE person_id = ? AND image_path = ? """, (person_id, image_path))count = cursor.fetchone()[0]# 如果不存在if count == 0:feature_blob = feature.tobytes()  # 将特征向量转换为二进制格式cursor.execute('''INSERT INTO features (person_id, image_path, feature_vector)VALUES (?, ?, ?)''', (person_id, image_path, feature_blob))conn.commit()conn.close()else:print(f"Feature for {person_id} - {image_path} already exists,  skipping")# 6. 处理每个文件夹,提取特征并保存到数据库
def process_folder(db_path, folder_path, person_id):for image_name in os.listdir(folder_path):image_path = os.path.join(folder_path, image_name)# 避免处理非图片文件if image_path.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):# 防止因图片损坏导致提取特侦失败致使程序中断try:feature = extract_feature(image_path)save_feature_to_db(db_path, person_id, image_path, feature)except Exception as e:print(e)# 7. 从数据库中获取某个人的平均特征向量
def get_avg_feature(db_path, person_id):conn = sqlite3.connect(db_path)cursor = conn.cursor()cursor.execute('''SELECT feature_vector FROM features WHERE person_id = ?''', (person_id,))rows = cursor.fetchall()conn.close()# 将所有特征向量转换为 numpy 数组features = [np.frombuffer(row[0], dtype=np.float32) for row in rows]avg_feature = np.mean(features, axis=0)return avg_feature# 8. 根据欧氏距离排序并重命名图像
def sort_and_rename_images(db_path, out_path, person_id):avg_feature = get_avg_feature(db_path, person_id)conn = sqlite3.connect(db_path)cursor = conn.cursor()cursor.execute('''SELECT image_path, feature_vector FROM features WHERE person_id = ?''', (person_id,))rows = cursor.fetchall()conn.close()# 计算欧氏距离并排序distances = []for row in rows:image_path, feature_blob = rowfeature = np.frombuffer(feature_blob, dtype=np.float32)distance = euclidean_distances([feature], [avg_feature])[0][0]distances.append((image_path, distance))# 按距离排序distances.sort(key=lambda x: x[1])# 重命名文件for idx, (image_path, _) in enumerate(distances):new_name = f"{idx:04d}.jpg"  # 按距离排序后的新文件名# new_path = os.path.join(folder_path, new_name)new_path = rf'{out_path}/{person_id}/{new_name}'# 如果目标文件夹不存在,则创建os.makedirs(os.path.dirname(new_path), exist_ok=True)shutil.copy(image_path, new_path)# os.rename(image_path, new_path)# 9. 主函数
def main():# 数据库路径db_path = r'D:\FS_project2\Feature_extraction\sql_database\features.db2'create_database(db_path)# 基础路径base_path = r'D:\FS_project2\Feature_extraction\peopel_crop'out_path = r'D:\FS_project2\Feature_extraction\out'# 第一步:提取特征并保存到数据库for folder in os.listdir(base_path):folder_path = os.path.join(base_path, folder)if os.path.isdir(folder_path):process_folder(db_path, folder_path, folder)print(f"Processed folder: {folder}")# 第二步:排序并重命名图像for folder in os.listdir(base_path):folder_path = os.path.join(base_path, folder)if os.path.isdir(folder_path):sort_and_rename_images(db_path, out_path, folder)print(f"Sorted and renamed folder: {folder}")if __name__ == "__main__":main()

http://www.dtcms.com/wzjs/228.html

相关文章:

  • 品质好货苏州seo关键词排名
  • 网站如何静态化seo交流qq群
  • 做网站下一页搜索引擎优化简称seo
  • 给网站划分栏目上海网站推广公司
  • 找人做销售网站免费二级域名生成网站
  • 手机网站制作合同google官网登录
  • 自学java 做网站 多久十大室内设计网站
  • 案例学 网页设计与网站建设安徽网站优化
  • 龙华网站制作要多少钱最新国内重大新闻
  • 撰写网站栏目规划中国四大软件外包公司
  • 万网网站空间多少钱一年站长素材官网
  • 中国移动视频网站建设整合营销理论主要是指
  • 贵阳网站建设咨询seo排名哪家有名
  • 网页建站软件宁波网络营销公司
  • 新乡做新网站品牌营销活动策划方案
  • 公司网站建设费如何入账常德政府网站市民留言
  • 重庆市住房和城乡建设厅网站首页搜索引擎优化方案
  • 奢侈品网站怎么做tuig优化昆山seo网站优化软件
  • 微信投票网站怎么做网络推广是干嘛的
  • 页面设计是什么专业游戏优化
  • 如何做网站认证自制网站
  • 深圳做网站信科百度官网登录
  • 大型购物网站有哪些百度seo关键词优化公司
  • 引流推广话术文案杭州龙席网络seo
  • 网站制作建设公司哪家好今日热点
  • 深圳做网站de线上销售渠道有哪些
  • 网站百度排名怎么做快win7优化工具哪个好用
  • java 网站开发最新技术免费建站平台
  • 南京门户网站建设店铺推广渠道有哪些方式
  • 山东兽药网站建设本溪seo优化