• AI+前端技术的结合(实现图片识别功能)


         随着人工智能技术的不断发展,AI在前端设计页面中的应用变得越来越普遍。比如:在电商平台上,可以利用对象检测技术实现商品的自动识别和分类;人脸识别;车辆检测;图片识别等等......其中一个显著的应用是在图像识别中,AI算法可以检测和标记图像中的对象,增强用户体验,并在网站或应用程序上实现创新功能。

    技术原理

         在demo中,我们将使用 JavaScript 和 Transformers 库来实现图像对象检测的功能。图像对象检测是计算机视觉领域中的重要任务,它可以识别图像中的不同对象并标注它们的位置。我们将使用一个预训练的对象检测模型,将其集成到网页中,通过上传图片来进行对象检测,并在图片上绘制边界框以标识检测到的对象。

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>图片识别title>
    7. <style>
    8. .container {
    9. margin: 40px auto;
    10. width: max(50vw, 400px);
    11. display: flex;
    12. flex-direction: column;
    13. align-items: center;
    14. }
    15. .custom-file-upload {
    16. display: flex;
    17. align-items: center;
    18. cursor: pointer;
    19. gap: 10px;
    20. border: 2px solid black;
    21. padding: 8px 16px;
    22. border-radius: 6px;
    23. }
    24. #file-upload {
    25. display: none;
    26. }
    27. #image-container {
    28. width: 100%;
    29. margin-top: 20px;
    30. position: relative;
    31. }
    32. #image-container>img {
    33. width: 100%;
    34. }
    35. .bounding-box {
    36. position: absolute;
    37. box-sizing: border-box;
    38. }
    39. .bounding-box-label {
    40. position: absolute;
    41. color: white;
    42. font-size: 12px;
    43. }
    44. style>
    45. head>
    46. <body>
    47. <main class="container">
    48. <label for="file-upload" class="custom-file-upload">
    49. <input type="file" accept="image/*" id="file-upload">
    50. 上传图片
    51. label>
    52. <div id="image-container">div>
    53. <p id="status">p>
    54. main>
    55. <script type="module">
    56. // 导入transformers nlp任务的pipeline和env对象
    57. import { pipeline, env } from "https://cdn.jsdelivr.net/npm/@xenova/transformers@2.6.0"
    58. // 是否允许本地模型
    59. env.allowLocalModels = false;
    60. // 获取文件上传和图片容器元素
    61. const fileUpload = document.getElementById('file-upload');
    62. const imageContainer = document.getElementById('image-container')
    63. // 监听文件上传事件
    64. fileUpload.addEventListener('change', function (e) {
    65. // FileReader 读取上传的图像
    66. const file = e.target.files[0];
    67. const reader = new FileReader();
    68. reader.onload = function (e2) {
    69. // 显示上传的图像
    70. const image = document.createElement('img');
    71. image.src = e2.target.result;
    72. imageContainer.appendChild(image)
    73. // 启动AI检测
    74. detect(image)
    75. }
    76. reader.readAsDataURL(file)
    77. })
    78. // 获取状态信息元素
    79. const status = document.getElementById('status');
    80. // 检测图片的AI任务
    81. const detect = async (image) => {
    82. status.textContent = "分析中..."
    83. const detector = await pipeline("object-detection", "Xenova/detr-resnet-50")
    84. const output = await detector(image.src, {
    85. threshold: 0.1, //设置了一个阈值,用于决定何时将检测结果识别为一个对象
    86. percentage: true //检测结果的置信度会以百分比的形式返回
    87. })
    88. // 渲染检测到的框
    89. output.forEach(renderBox)
    90. }
    91. // 渲染检测框函数
    92. function renderBox({ box, label }) {
    93. const { xmax, xmin, ymax, ymin } = box
    94. const boxElement = document.createElement("div");
    95. boxElement.className = "bounding-box"
    96. Object.assign(boxElement.style, {
    97. borderColor: '#123123',
    98. borderWidth: '1px',
    99. borderStyle: 'solid',
    100. left: 100 * xmin + '%',
    101. top: 100 * ymin + '%',
    102. width: 100 * (xmax - xmin) + "%",
    103. height: 100 * (ymax - ymin) + "%"
    104. })
    105. const labelElement = document.createElement('span');
    106. labelElement.textContent = label;
    107. labelElement.className = "bounding-box-label"
    108. labelElement.style.backgroundColor = '#000000'
    109. boxElement.appendChild(labelElement);
    110. imageContainer.appendChild(boxElement);
    111. }
    112. script>
    113. body>
    114. html>

    效果图

  • 相关阅读:
    【Java第31期】:Spring中存储Bean的注解以及用法
    【21天算法学习】索引查找
    vue3 项目搭建教程整理
    微服务系列开端-简述
    看完通辽可汗小约翰之后应该掌握的英语词汇 01 外交类
    使用非递归的方式实现归并排序
    序列化工具Protobuf在Idea中的配置和在java中的使用实例
    Keithley2420吉时利2420数字源表
    ElasticSearch导入PDF,WORD到ES进行全文检索,全文高亮等操作。
    JVM完整图文学习笔记 (含拓展知识广度学习) 第三章: 类加载与字节码技术
  • 原文地址:https://blog.csdn.net/xiaoxiaoxiao_lu/article/details/139767187