【教学类-50-12】20240505“数一数”图片样式10:数一数(4种“动物”图案)

文章讨论了如何用Python实现一个针对幼儿的点数工具,涉及图像处理、随机化和避免图形重叠,以激发兴趣并提升数学能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作品展示

背景需求

(3)“幼儿探索自制学具”——关注幼儿兴趣延伸

有几位数数能力强的孩子,把自己能点数的图片都完成了,无事可干,就用手工纸和丙烯马克笔模拟绘画图纸,并向同伴炫耀:

“我画了长方形!”(添加其他几何图形)

“我喜欢绿色,你数数有几个?”(添加其他颜色)

图14-1 幼儿自制“数一数1.0”图纸

孩子自制点数卡模仿地“惟妙惟肖”!这也启发我是否可以为幼儿提供“几何图形”以外的卡通图案、幼儿自制图案作为点数的元素?

图14-2 “数一数1.0”学具的优化思路(三

素材准备:

用了“动物数独”里面的四个动物头像图片

【教学类-52-01】20240411动物数独(4宫格)宫格图-CSDN博客文章浏览阅读1k次,点赞21次,收藏5次。【教学类-52-01】20240411动物数独(4宫格)宫格图https://blog.csdn.net/reasonsummer/article/details/137679361

问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份)幼儿对彩色动物图案兴趣浓厚——特征明显、容易辨认。

  1. 选择动物图案的孩子很多11人,正确率高

  2. 动物1-1和动物6-1有错误

  3. 实际只有4种动物,每张图片上动物实际而且数量不多,容易点数。

作品展示:12张

幼儿点数能力挺好的,不过“书写笔”让人纠结

1、黑色记号笔数量多,书写方便,看的清晰,擦除方便(幼儿用餐巾纸擦除修改答案)

2、塑封纸上的水笔印记,用水一擦,餐巾纸吸干,可以反复利用。

3、丙烯记号笔,刚写,也容易被磨掉,干透后,无法用水、酒精擦除,必须费力刮掉丙烯颜料。

有没有快干、水擦的塑封纸专用笔啊!(黑色油性记号笔、黑色白板笔?)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值