解锁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领域的理解。希望读者通过本文的学习,能够在实践中运用所学知识,不断提升自己的编程能力。

相关推荐
文火冰糖的硅基工坊14 分钟前
[嵌入式系统-146]:五次工业革命对应的机器人形态的演进、主要功能的演进以及操作系统的演进
前端·网络·人工智能·嵌入式硬件·机器人
猫头虎21 分钟前
openAI发布的AI浏览器:什么是Atlas?(含 ChatGPT 浏览功能)macOS 离线下载安装Atlas完整教程
人工智能·macos·chatgpt·langchain·prompt·aigc·agi
老六哥_AI助理指南25 分钟前
为什么AI会改变单片机的未来?
人工智能·单片机·嵌入式硬件
SEO_juper37 分钟前
2026 AI可见性:构建未来-proof策略的顶级工具
人工智能·搜索引擎·百度·工具·数字营销
sivdead40 分钟前
当前智能体的几种形式
人工智能·后端·agent
AIGC_北苏41 分钟前
大语言模型,一个巨大的矩阵
人工智能·语言模型·矩阵
算家计算1 小时前
DeepSeek-OCR本地部署教程:DeepSeek突破性开创上下文光学压缩,10倍效率重构文本处理范式
人工智能·开源·deepseek
言之。1 小时前
Andrej Karpathy 演讲【PyTorch at Tesla】
人工智能·pytorch·python
算家计算1 小时前
快手推出“工具+模型+平台”AI编程生态!大厂挤占AI赛道,中小企业如何突围?
人工智能·ai编程·资讯
阿里云大数据AI技术1 小时前
云栖实录 | DataWorks 发布下一代 Data+AI 一体化平台,开启企业智能数据新时代
大数据·人工智能