解锁NLP之图片检测:前端编程技巧与AI应用

引言

在当今大厂级别的编程中,不仅要求功能强大,还需要展现出高超的逻辑能力和深入的语言理解。本文将介绍如何结合前端编程技巧和人工智能(AI)应用,实现图片检测功能。

编程效率的追求

大厂程序员们始终追求编程效率的提升。在HTML编程中,使用EMMET(HTML代码快速输入工具)可以极大地提高编程效率。此外,通过刻意练习,我们能够培养快速编程的能力,从而更高效地完成任务。

前端素养的重要性

前端素养是成为优秀程序员的关键。构建语义化的HTML结构是前端开发的基础之一。不同的HTML标签代表着不同的语义,例如使用<main>标签比使用<div>更能表达页面的主体内容。同时,熟悉CSS选择器的使用,能够更精准地定位和样式化HTML元素,提高页面的美观程度和用户体验。

NLP任务之图片检测

本文以NLP(自然语言处理)任务中的图片检测为例,展示了如何将前端编程技巧与AI应用相结合,实现图片检测的功能。以下是相关代码:

xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>nlp之图片识别,两种语言</title>
    <style>
        .container {
        margin: 40px auto;
        width: max(50vw, 400px);
        display: flex;
        flex-direction: column;
        align-items: center;
    }
    .custom-file-upload {
        display: flex;
        align-items: center;
        cursor: pointer;
        gap:10px;
        border: 2px solid black;
        padding: 8px 16px;
        border-radius: 6px;
    }
    #file-upload {
        display: none;
    }
    #image-container {
        width: 100%;
        margin-top:20px;
        position: relative;
    }
    #image-container>img {
        width: 100%;
    }
    .bounding-box {
        position: absolute;
        box-sizing: border-box;
    }
    .bounding-box-label {
        position: absolute;
        color: white;
        font-size: 12px;
    }
    </style>
</head>
<body>
    <!-- 语义化 main就比div 更好 页面中的主体内容 -->
    <!-- css 选择器 -->
    <main class="container">
        <label for="file-upload" class="custom-file-upload">
            <!-- <input type="file" id="file-upload" accept="image/*"> -->
            <input type="file" accept="image/*" id="file-upload">
            上传图片
        </label>
        <div id="image-container">
        </div>
        <p id="status"></p>
    </main>
    <script type="module">
        // transformers npl 任务 
        import { pipeline, env } from "https://cdn.jsdelivr.net/npm/@xenova/transformers@2.6.0"
        env.allowLocalModels = false;

        const fileUpload = document.getElementById('file-upload');
        const imageContainer = document.getElementById('image-container');
        fileUpload.addEventListener('change', function (e1) {
            console.log(e1.target.files[0]);
            const file = e1.target.files[0];
            //新建一个FileReader 对象,01 序列
            //图片比较大
            const reader = new FileReader();
            reader.onload = function (e2) {
                //加载完成
                const image = document.createElement('img'); //图片对象
                image.src = e2.target.result;
                console.log(image.src);
                imageContainer.appendChild(image);
                detect(image);//启动ai任务 功能模块化,封装出去
            }
            reader.readAsDataURL(file);
        })
        const status = document.getElementById('status');
        // 检测图片的AI任务
        const detect = async (image) => {
            status.textContent = "分析中..."
            const detector = await pipeline("object-detection",
                "Xenova/detr-resnet-50");//model 实例化了detector对象
            const output = await detector(image.src, {
                threshold: 0.1,
                percentage: true
            })
            console.log(output);
            output.forEach(renderBox)
        }
        function renderBox({ box, label }) {
            const { xmax, xmin, ymax, ymin } = box;
            const boxElement = document.createElement("div");
            boxElement.className = "bounding-box";
            Object.assign(boxElement.style, {
                borderColor: '#123123',
                borderWidth: '1px',
                borderStyle: 'solid',
                left: 100 * xmin + '%',
                top: 100 * ymin + '%',
                width: 100 * (xmax - xmin) + "%",
                height: 100 * (ymax - ymin) + "%"
            })
            const labelElement = document.createElement('span');
            labelElement.textContent = label;
            labelElement.className = "bounding-box-label";
            labelElement.style.backgroundColor = '#000000';
            boxElement.appendChild(labelElement);
            imageContainer.appendChild(boxElement);
        }
    </script>
</body>
</html>

在代码中,我们通过HTML和CSS构建了一个简单的页面,用户可以上传图片。一旦用户上传了图片,JavaScript代码将调用AI模型对图片进行检测,并在页面上显示检测结果。这个过程中,运用了前文提到的HTML语义化、CSS选择器等前端技巧,以及异步编程、事件监听等JavaScript技术。

效果图

结语

通过本文的学习,我们了解了如何结合前端编程技巧和AI应用,实现图片检测的功能。这不仅提升了我们的编程技能,也拓展了我们对前端和AI领域的理解。希望读者通过本文的学习,能够在实践中运用所学知识,不断提升自己的编程能力。

相关推荐
聽雨23716 分钟前
03每日简报20250705
人工智能·社交电子·娱乐·传媒·媒体
二川bro36 分钟前
飞算智造JavaAI:智能编程革命——AI重构Java开发新范式
java·人工智能·重构
acstdm41 分钟前
DAY 48 CBAM注意力
人工智能·深度学习·机器学习
澪-sl1 小时前
基于CNN的人脸关键点检测
人工智能·深度学习·神经网络·计算机视觉·cnn·视觉检测·卷积神经网络
羊小猪~~1 小时前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研
摸爬滚打李上进1 小时前
重生学AI第十六集:线性层nn.Linear
人工智能·pytorch·python·神经网络·机器学习
HuashuiMu花水木1 小时前
PyTorch笔记1----------Tensor(张量):基本概念、创建、属性、算数运算
人工智能·pytorch·笔记
lishaoan772 小时前
使用tensorflow的线性回归的例子(四)
人工智能·tensorflow·线性回归
AI让世界更懂你2 小时前
【ACL系列论文写作指北15-如何进行reveiw】-公平、公正、公开
人工智能·自然语言处理
牛客企业服务3 小时前
2025年AI面试推荐榜单,数字化招聘转型优选
人工智能·python·算法·面试·职场和发展·金融·求职招聘