Streamlit-Drawable-Canvas:终极交互式绘图组件,让你的Streamlit应用秒变画板
Streamlit-Drawable-Canvas终极交互式绘图组件让你的Streamlit应用秒变画板【免费下载链接】streamlit-drawable-canvasDo you like Quick, Draw? Well what if you could train/predict doodles drawn inside Streamlit? Also draws lines, circles and boxes over background images for annotation.项目地址: https://gitcode.com/gh_mirrors/st/streamlit-drawable-canvasStreamlit-Drawable-Canvas是一款基于Fabric.js的Streamlit自定义组件它能让你在Streamlit应用中轻松集成交互式绘图功能。无论是快速原型设计、图像标注还是创意涂鸦这个强大的组件都能让你的应用瞬间拥有专业级画板功能无需复杂的前端开发知识。为什么选择Streamlit-Drawable-Canvas在数据可视化和机器学习应用中有时我们需要让用户直接在界面上绘制图形或标注图像。传统的解决方案往往需要繁琐的前后端交互开发而Streamlit-Drawable-Canvas将这一切简化到只需几行Python代码。这款组件的核心优势在于零前端知识要求完全通过Python API控制无需编写JavaScript丰富的绘图工具支持自由绘制、直线、圆形、矩形等多种图形高度可定制笔触颜色、宽度、背景样式等均可灵活配置即时数据反馈绘制内容可直接转换为NumPy数组或Pillow图像方便后续处理快速安装指南安装Streamlit-Drawable-Canvas非常简单只需使用pip命令即可pip install streamlit-drawable-canvas如果你需要从源码安装可以克隆仓库后进行本地安装git clone https://gitcode.com/gh_mirrors/st/streamlit-drawable-canvas cd streamlit-drawable-canvas pip install .入门级使用示例下面是一个最简单的使用示例只需几行代码就能创建一个功能完整的绘图应用import streamlit as st from streamlit_drawable_canvas import st_canvas # 创建画布组件 canvas_result st_canvas( fill_colorrgba(255, 165, 0, 0.3), # 填充颜色 stroke_width2, # 笔触宽度 stroke_color#ff0000, # 笔触颜色 background_color#eeeeee, # 背景颜色 height400, # 画布高度 width600, # 画布宽度 drawing_modefreedraw, # 绘图模式 keycanvas, # 组件唯一标识 ) # 显示绘制结果 if canvas_result.image_data is not None: st.image(canvas_result.image_data)核心功能详解多样化的绘图工具Streamlit-Drawable-Canvas提供了多种绘图工具可通过drawing_mode参数进行切换freedraw自由绘制模式支持手绘线条line直线工具可绘制精确的直线rect矩形工具支持绘制矩形和正方形circle圆形工具支持绘制圆形和椭圆polygon多边形工具可绘制任意多边形这些工具的实现代码位于streamlit_drawable_canvas/frontend/src/lib/目录下包括circle.ts、line.ts、rect.ts等文件。图像标注功能除了创建空白画布该组件还支持上传背景图片进行标注from PIL import Image import numpy as np # 上传图片 uploaded_file st.file_uploader(上传背景图片, type[png, jpg]) if uploaded_file is not None: image Image.open(uploaded_file) img_array np.array(image) # 在图片上创建画布 canvas_result st_canvas( background_imageImage.open(uploaded_file), heightimage.height, widthimage.width, drawing_moderect, # 使用矩形工具进行标注 keyimage_annotation, )绘制数据获取与处理绘制完成后你可以通过canvas_result对象获取多种格式的绘制数据image_dataNumPy数组格式的图像数据json_dataJSON格式的绘制对象数据canvas_height和canvas_width画布尺寸信息这些数据可以直接用于机器学习模型训练、图像分析或保存为图片文件。高级配置选项Streamlit-Drawable-Canvas提供了丰富的配置选项让你可以完全定制画布的外观和行为canvas_result st_canvas( # 基础配置 height500, width700, # 样式配置 stroke_widthst.slider(笔触宽度, 1, 25, 3), stroke_colorst.color_picker(笔触颜色, #000000), fill_colorst.color_picker(填充颜色, #ffffff), background_colorst.color_picker(背景颜色, #eeeeee), # 行为配置 drawing_modest.selectbox( 绘图模式, [freedraw, line, rect, circle, polygon] ), keyadvanced_canvas, # 交互配置 display_toolbarst.checkbox(显示工具栏, True), point_display_radiusst.slider(点显示半径, 0, 20, 3), )实际应用场景1. 快速原型设计设计师可以使用Streamlit-Drawable-Canvas快速绘制界面原型配合Streamlit的交互组件实时调整设计方案。2. 图像标注工具在计算机视觉项目中你可以用它创建简单而高效的图像标注工具标注结果可直接用于模型训练。3. 教育类应用创建互动式教学工具让学生在网页上直接绘制数学公式、化学结构或其他教学内容。4. 创意绘画应用结合Streamlit的部署能力快速创建并分享在线绘画应用支持多人协作创作。常见问题解答Q: 如何保存绘制的图像A: 可以使用Pillow库将image_data保存为图片文件from PIL import Image import numpy as np if canvas_result.image_data is not None: img Image.fromarray(canvas_result.image_data.astype(uint8), RGBA) img.save(drawing.png) st.success(图像保存成功)Q: 是否支持撤销/重做功能A: 是的组件内置了撤销/重做功能用户可以通过工具栏上的按钮或快捷键操作。相关实现代码在streamlit_drawable_canvas/frontend/src/components/CanvasToolbar.tsx中。Q: 能否自定义工具栏A: 可以通过修改前端代码来自定义工具栏工具栏组件位于streamlit_drawable_canvas/frontend/src/components/目录。总结Streamlit-Drawable-Canvas为Streamlit应用带来了强大的绘图能力无论是数据科学家、机器学习工程师还是开发者都能通过这个组件轻松添加交互式绘图功能。它的简单易用性和丰富功能使其成为Streamlit生态中不可或缺的一部分。如果你正在开发需要用户绘图或图像标注功能的Streamlit应用不妨尝试一下Streamlit-Drawable-Canvas它可能会成为你项目中的秘密武器【免费下载链接】streamlit-drawable-canvasDo you like Quick, Draw? Well what if you could train/predict doodles drawn inside Streamlit? Also draws lines, circles and boxes over background images for annotation.项目地址: https://gitcode.com/gh_mirrors/st/streamlit-drawable-canvas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MCP协议:AI智能体开发的标准化接口与实战指南

MCP协议:AI智能体开发的标准化接口与实战指南

1. 项目概述:为什么说MCP是AI时代的“USB-C”?最近在折腾各种AI智能体开发框架时,我总被一个老问题困扰:不同的工具、不同的数据源、不同的模型,就像一堆不同接口的充电器和设备,每次想让他们“对话”都得专…

2026/10/14 18:50:03 阅读更多 →
Helix Hooks完全手册:轻松掌握React状态管理与副作用处理

Helix Hooks完全手册:轻松掌握React状态管理与副作用处理

Helix Hooks完全手册:轻松掌握React状态管理与副作用处理 【免费下载链接】helix A simple, easy to use library for React development in ClojureScript. 项目地址: https://gitcode.com/gh_mirrors/helix/helix Helix是一个简单易用的ClojureScript Reac…

2026/10/14 23:31:09 阅读更多 →
网站建设nayuwang:从零到一的深度实战指南与避坑手册

网站建设nayuwang:从零到一的深度实战指南与避坑手册

说实话,每次看到有人问我“网站建设nayuwang”到底值不值得做,或者是想了解通过网站建设nayuwang来提升品牌曝光度的具体逻辑时,我总会忍不住点上一根烟( metaphorically speaking, as I dont actually smoke, but you get the point),深吸一口气,然后长叹一声。不是因为…

2026/10/11 15:32:21 阅读更多 →

最新新闻

0代码上位机开发实战:从SCPI指令到示波器控制

0代码上位机开发实战:从SCPI指令到示波器控制

1. 从天天写上位机到拖拽界面:这个需求背后的真实痛点1.1 “帮我写个上位机”为什么成为实验室的噩梦我在电子测量这个行当待了挺多年,见过太多这个场景:某研发工程师拿着一台新到的示波器,对着屏幕上的波形图看了半天&#xff0c…

2026/10/14 23:31:18 阅读更多 →
artcraft 项目实战:用工程化手艺落地艺术化创意

artcraft 项目实战:用工程化手艺落地艺术化创意

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个标题,我脑子里蹦出来的第一反应是“艺术”加“手艺”的组合词。直觉告诉我,这不是一个纯技术框架的名字,也不是某个具体产品的品牌名,它…

2026/10/14 23:31:17 阅读更多 →
贝塞尔曲线从原理到实战:控制点、德卡斯特里奥与工程应用

贝塞尔曲线从原理到实战:控制点、德卡斯特里奥与工程应用

1. 为什么贝塞尔曲线值得你花时间搞懂如果你做过图形界面、做过动画、做过字体设计,甚至只是用过PPT里的曲线工具,那你大概率已经和贝塞尔曲线打过照面了,只是当时未必知道它叫什么。我第一次真正意识到它的存在,是在做一个自定义…

2026/10/14 23:31:17 阅读更多 →
游戏反作弊攻防技术体系:从反调试到行为检测的逆向工程实践

游戏反作弊攻防技术体系:从反调试到行为检测的逆向工程实践

1. 从“封号”说起:反作弊攻防到底在对抗什么聊游戏逆向,绕不开反作弊。很多人一上来就想学怎么绕过检测、怎么改内存,但真正在这个圈子里待久了你会发现,反作弊攻防的本质不是“猫抓老鼠”那么简单,它更像是一场关于信…

2026/10/14 23:31:17 阅读更多 →
端侧相册文搜图全链路实践:双塔模型与向量检索的工程落地

端侧相册文搜图全链路实践:双塔模型与向量检索的工程落地

做相册文搜图这个需求,是在一次“语音输入找照片”的可用性测试上被彻底点燃的。测试同事对着手机说“去年生日那天海边日落拍的那几张”,结果搜索框转了三秒圈,返回的是按时间倒序的整个相册列表。那一刻真挺尴尬的:搜索入口存在…

2026/10/14 23:31:17 阅读更多 →
MiniMind:两小时3元成本从零训练64M参数中文大模型

MiniMind:两小时3元成本从零训练64M参数中文大模型

我第一次看到 MiniMind 这个项目时,第一反应是:3块钱、2小时、64M参数、从零训练大语言模型?这四个词摆在一起,怎么看都像标题党。但真正把项目思路拆开跑完一遍之后,我得说,这个项目的价值不在于那 64M 参…

2026/10/14 23:30:13 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →