作品展示
背景需求
(3)“幼儿探索自制学具”——关注幼儿兴趣延伸
有几位数数能力强的孩子,把自己能点数的图片都完成了,无事可干,就用手工纸和丙烯马克笔模拟绘画图纸,并向同伴炫耀:
“我画了长方形!”(添加其他几何图形)
“我喜欢绿色,你数数有几个?”(添加其他颜色)
| | |
图14-1 幼儿自制“数一数1.0”图纸
孩子自制点数卡模仿地“惟妙惟肖”!这也启发我是否可以为幼儿提供“几何图形”以外的卡通图案、幼儿自制图案作为点数的元素?
|
图14-2 “数一数1.0”学具的优化思路(三)
素材准备:
用了“动物数独”里面的四个动物头像图片
问AI
序号 | 输入关键词(问题、需求) |
1 | 四种几何图形换成四张图片,图片可变大变小,图片之间不能相交 |
2 | not any(shape.intersects(s) for s in shapes): NameError: name 'shapes' is not defined |
3 | 只显示了一个图案,我需要显示4个图案 |
4 | 需要一张画布上随机出现4个动物图片,图片与图片不相交 |
5 | OSError: [Errno 22] Invalid argument: 'pic+ r"\\猴.png"' |
6 | 随机出现三个兔、四只猫、二个猴、二个猪 |
7 | 删除一个123文件夹内前98个文件 |
8 | 把123文件下的文件复制到234文件下,并改名 |
9 | 把123文件下的文件剪切到234 |
10 | 生成一张图片后清空画布,重新生成新的图案 |
11 | 读取pic,文件夹下所有图片 |
12 | 以上代码生成图片时间很长,怎样直接生成一张图片上带有多个动物图片 |
13 | 生成num个图片是要一次次保存,添加在前一张图上,如何直接生成一张有num个图片的图片 |
14 | 读取123文件夹下所有文件名称,加上前面的路径 |
15 | 有没有简单写法,写成一行 |
16 | Python,读取123文件夹下的4张图片,234.docx里面有2张分开的表格,在第1个表格的01、11、21、31格内分别插入4张图片,在第2个表格的01、11、21、31格内分别插入4张图片,另两个村为456.docx |
17 | 单元格坐标是01、11、21、31 |
18 | 在表格中的单元格(0, 1),(1, 1),(2, 1),(3, 1)中插入图片 |
19 | shutil.remove(path + fr'\数一数模板(动物.)docx')为什么错 |
设计过程也很复杂,这里就不解释了,直接上代码
代码展示:
'''
03数一数图片(动物四图片)边框内+图形步相接py(6款难度,数量不同)
作者:AI对话大师、阿夏
时间:2024年4月28日 20:00
'''
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import os
import random
import time
from shapely.geometry import Polygon
# 输入画布大小和要生成的图片数量
canvas_size =15
# int(input('请输入画布大小:15\n'))
num =100
# int(input('请输入要生成的图片数量:100次\n'))# 提取的数量,尽量多一点刷100可能也只有8个图案
f=2
# 0个一颗星,10个2颗星int(input('几份:10\n'))
# 创建目录
output_dir = r'C:\Users\jg2yXRZ\OneDrive\桌面\数一数2\03图片框内不连接'
end=output_dir+r'\01彩色图片不相交'
os.makedirs(output_dir, exist_ok=True)
os.makedirs(end, exist_ok=True)
pic_dir = r'C:\Users\jg2yXRZ\OneDrive\桌面\数一数2\00彩色图片'
# 动物图片路径
# 获取文件夹中的所有文件
file_list = os.listdir(pic_dir)
# 过滤出图片文件
image_files = [file for file in file_list if file.endswith('.png') or file.endswith('.jpg') or file.endswith('.jpeg')]
# 构建图片文件的完整路径
# # 自制图片路径
animal_paths = [os.path.join(pic_dir, file) for file in image_files]
print(len(animal_paths))
# 0.1缩放比例的范围,从0.1-0.6,01-01生成图案最多,0,1-0,5因为有大图占满了,所以小图数量会很少
fw=[]
# 倒过来的数字,数字越大图案大,数量少,难度越低
for y in range(6,0,-1):
fw.append(f'0.{y}')
print(fw)
# 提取的数量,尽量多一点刷100可能也只有8个图案
# 统计每张图片出现的次数
image_count = {}
nn=1
for ff in fw: # 0.1-0.1
print(f'0.6-{ff}')
for ii in range(f): # 生成2份
print(f'第{ii+1}份')
# 创建画布
fig, ax = plt.subplots(figsize=(canvas_size, canvas_size))
ax.set_xlim([0, canvas_size])
ax.set_ylim([0, canvas_size])
# 图形尺寸范围
size_range = (0.1, float(ff)) # 图片尺寸范围(相对于画布大小的比例)
shapes = [] # 存储已生成的图形
image_count = {}
# 随机生成指定数量的动物图片
# for ii in range(num):r
tencent_dir = output_dir+r'\零时'
os.makedirs(tencent_dir, exist_ok=True)
# 随机抽取多个动物图片
num_images = 100
animal_paths = np.random.choice(animal_paths, num_images)
print(animal_paths)
print(len(animal_paths))
# 遍历动物图片
for i, animal_path in enumerate(animal_paths):
img = mpimg.imread(animal_path)
img_height, img_width = img.shape[:2]
# 随机确定图片的大小和位置
size = random.uniform(size_range[0], size_range[1]) * canvas_size
position_x = random.uniform(0, canvas_size - size)
position_y = random.uniform(0, canvas_size - size)
# 检查图片是否与其他图片不相交
shape = Polygon([(position_x, position_y),
(position_x + size, position_y),
(position_x + size, position_y + size),
(position_x, position_y + size)])
if not any(shape.intersects(s) for s in shapes):
# 添加图片到画布
ax.imshow(img, extent=[position_x, position_x + size, position_y, position_y + size])
shapes.append(shape)
# 统计图片出现的次数
if animal_path in image_count:
image_count[animal_path] += 1
else:
image_count[animal_path] = 1
# 打印每张图片出现的次数
print("图片统计:")
for image_path, count in image_count.items():
print(f"{image_path}: {count}")
# 隐藏坐标轴
ax.axis('off')
# 保存图形
output_path = os.path.join(tencent_dir, f'{ii:02d}.png')
plt.savefig(output_path, dpi=200, bbox_inches='tight')
# import time
# time.sleep(2)
shapes.clear()
import os
import shutil
# 获取123文件夹中的所有文件
files = os.listdir(tencent_dir)
# 遍历文件夹中的文件
for file in files:
# 构建源文件路径和目标文件路径
source_file_path = os.path.join(tencent_dir, file)
file=f'{nn:02d}.png'
target_file_path = os.path.join(end, file)
nn+=1
# 剪切文件到目标文件夹
shutil.move(source_file_path, target_file_path)
# 清空画布和图形列表
ax.cla()
shapes.clear()
# 关闭画布
plt.close(fig)
# 删除文件夹
import shutil
shutil.rmtree(tencent_dir)
重点说明:
1、图片生成与几何生成一样,会检查画布上已经有的图案的位置,如果新的图案出现的位置与已有图案位置相交,这个新图案就会被放弃,重新生成一个新位置,一个新图案,再次进行交叉检测。所以预先抽取100次图片,然后听天由命。
2、0.1-0.6的比例,说明这张图上会出现60%缩放的超大图片,有了大图,其他小图就不容易被加入画布,所以图形数量很少。
3、0.1-0.1的比例,说明这张图上全部都是10%大小的动物图片,都是小图,有足够空间添加大量的小图片,所以图形数量很多
动物图片也可以随机生成大小或控制大小。这里采用随机生成大小(0.1:0.1-0.6),也就是如果某个动物图片越大,其他图片的生成的位置会变少,四种动物图案总数会减少。反之,动物图片越小,生成四种图案数量会更多,点数难度越大。(图16-1)
| |
图16-2 幼儿操作过程(点数、写数、绘画)
在实际操作中,(图16-2)幼儿除了点数动物图片的数量,还可以在画布空白处画自己喜欢的图案,进一步进行点数,增加参与性。
| |
图19-2 手动输入幼儿答案
|
图19-3 幼儿选择情况直方图(AI对话大师编写)
2024年4月18日的“数一数2.0”集体测试中,26位幼儿累计完成了34份(共52份),“动物图案”的选择量最多(11份)幼儿对彩色动物图案兴趣浓厚——特征明显、容易辨认。
-
选择动物图案的孩子很多11人,正确率高
-
动物1-1和动物6-1有错误
-
实际只有4种动物,每张图片上动物实际而且数量不多,容易点数。