github copilot 0.33模型使用问题

任务: 对other_face_summary根据area进行分bin, 每个bin 1000个样本, 间距500, 将图片从image_path复制到/areas, 分开放文件夹, 在图片上绘制置信框, 左上角(det_1_x,det_1_y), 右下角(det_2_x,det_2_y), 多进程处理

GPT-5.1-Codex-Mini 在ask模式, 短问题下会出现奇怪的问题, 返回代码重复了两次, 同时bin_size使用错误, 应该使用step才对, 他把取1000个样本和间隔500弄混了

Gemini 3 Flash: 注释位置经常用错误注释方法, 但是功能正确

返回结果:

GPT-5.1

python 复制代码
# ...existing code...
from PIL import ImageDraw
from multiprocessing import Pool

base_target = '/areas'
os.makedirs(base_target, exist_ok=True)

records = other_face_summary.sort('area').select([
    'image_path', 'det_1_x', 'det_1_y', 'det_2_x', 'det_2_y', 'area'
]).to_dicts()
total = len(records)
bin_size = 1000
step = 500

def paint_and_copy(task):
    image_path, x1, y1, x2, y2, target_dir = task
    target_path = os.path.join(target_dir, os.path.basename(image_path))
    try:
        with Image.open(image_path) as img:
            draw = ImageDraw.Draw(img)
            draw.rectangle([x1, y1, x2, y2], outline='red', width=3)
            img.save(target_path)
    except Exception as exc:
        return image_path, False, str(exc)
    return image_path, True, None

tasks = []
for start in range(0, total, step):
    end = min(start + bin_size, total)
    if start >= end:
        break
    folder = os.path.join(base_target, f'bin_{start}_{end}')
    os.makedirs(folder, exist_ok=True)
    for rec in records[start:end]:
        tasks.append((
            rec['image_path'],
            rec['det_1_x'],
            rec['det_1_y'],
            rec['det_2_x'],
            rec['det_2_y'],
            folder,
        ))

with Pool() as pool:
    pool.map(paint_and_copy, tasks)
```// filepath: \jupyter\0.ipynb
# ...existing code...
from PIL import ImageDraw
from multiprocessing import Pool

base_target = '/areas'
os.makedirs(base_target, exist_ok=True)

records = other_face_summary.sort('area').select([
    'image_path', 'det_1_x', 'det_1_y', 'det_2_x', 'det_2_y', 'area'
]).to_dicts()
total = len(records)
bin_size = 1000
step = 500

def paint_and_copy(task):
    image_path, x1, y1, x2, y2, target_dir = task
    target_path = os.path.join(target_dir, os.path.basename(image_path))
    try:
        with Image.open(image_path) as img:
            draw = ImageDraw.Draw(img)
            draw.rectangle([x1, y1, x2, y2], outline='red', width=3)
            img.save(target_path)
    except Exception as exc:
        return image_path, False, str(exc)
    return image_path, True, None

tasks = []
for start in range(0, total, step):
    end = min(start + bin_size, total)
    if start >= end:
        break
    folder = os.path.join(base_target, f'bin_{start}_{end}')
    os.makedirs(folder, exist_ok=True)
    for rec in records[start:end]:
        tasks.append((
            rec['image_path'],
            rec['det_1_x'],
            rec['det_1_y'],
            rec['det_2_x'],
            rec['det_2_y'],
            folder,
        ))

with Pool() as pool:
    pool.map(paint_and_copy, tasks)

Gemini 3 Flash

python 复制代码
// ...existing code...
import os
from PIL import Image, ImageDraw
from concurrent.futures import ProcessPoolExecutor
from pathlib import Path

def process_item(row):
    """处理单张图片:绘制检测框并保存"""
    try:
        img_path = row['image_path']
        save_dir = Path(f"/areas/{row['bin_name']}")
        save_dir.mkdir(parents=True, exist_ok=True)
        
        with Image.open(img_path).convert("RGB") as img:
            draw = ImageDraw.Draw(img)
            # 绘制置信框 (det_1_x, det_1_y) 为左上角, (det_2_x, det_2_y) 为右下角
            draw.rectangle(
                [row['det_1_x'], row['det_1_y'], row['det_2_x'], row['det_2_y']], 
                outline="red", 
                width=3
            )
            img.save(save_dir / row['basename'])
    except Exception as e:
        return f"Error {row['basename']}: {e}"

# 1. 根据 area 分 bin (间距 500),并每组提取 1000 个样本
df_tasks = (
    other_face_summary
    .with_columns([
        ((pl.col("area") // 500) * 500).cast(pl.Int64).alias("bin_start")
    ])
    .with_columns([
        (pl.col("bin_start").cast(pl.Utf8) + "_" + (pl.col("bin_start") + 500).cast(pl.Utf8)).alias("bin_name")
    ])
    .group_by("bin_name")
    .head(1000)
)

# 2. 多进程执行
if __name__ == "__main__":
    tasks = df_tasks.to_dicts()
    print(f"Total images to process: {len(tasks)}")
    with ProcessPoolExecutor(max_workers=min(os.cpu_count(), 16)) as executor:
        executor.map(process_item, tasks)
相关推荐
passerby60615 小时前
完成前端时间处理的另一块版图
前端·github·web components
草梅友仁7 小时前
墨梅博客 1.4.0 发布与开源动态 | 2026 年第 6 周草梅周报
开源·github·ai编程
学电子她就能回来吗9 小时前
深度学习速成:损失函数与反向传播
人工智能·深度学习·学习·计算机视觉·github
xuhe212 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
宇宙帅猴13 小时前
GitHub 私有仓库认证完整指南:告别密码错误,使用 PAT 令牌
github
前端市界15 小时前
用 React 手搓一个 3D 翻页书籍组件,呼吸海浪式翻页,交互体验带感!
前端·架构·github
happyprince15 小时前
2026年02月07日热门github项目
github
CoderJia程序员甲16 小时前
GitHub 热榜项目 - 日榜(2026-02-06)
人工智能·ai·大模型·github·ai教程
荔枝吻18 小时前
忘记服务器密码,在Xshell7中查看已保存密码
运维·服务器·github
tod11320 小时前
TCP全连接队列与tcpdump抓包
网络·网络协议·tcp/ip·github·tcpdump