百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

给bolt编程平台5分钟时间:让编程小白成顶级编程大师

liuian 2025-02-03 13:58 39 浏览

这个AI编程全自动网站建设与应用开发平台确实牛逼https://bolt.new/


文章作者使用这个平台《https://bolt.new/》来包装自己的手机聊天桌面非常方便,把代码给AI让包装成手机应用2分钟就能做好APP。

以下是文章作者开发的手机桌面聊天应用APP、请扫码使用。


手机应用桌面开源代码↓

<!DOCTYPE html>

<html lang="zh">

<head>

<meta charset="UTF-8" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<title>DeepSeek</title>

<!-- 引入 Google Fonts -->

<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;700&display=swap" rel="stylesheet">

<!-- MathJax 配置与脚本 -->

<script>

window.MathJax = {

tex: {

inlineMath: [['#39;, '#39;], ['\#39;, '\#39;]],

displayMath: [['$', '$'], ['\\[', '\\]']]

}

};

</script>

<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>

<style>

/* 全局样式 */

* {

margin: 0;

padding: 0;

box-sizing: border-box;

font-family: 'Noto Sans SC', sans-serif;

}

body {

display: flex;

flex-direction: column;

width: 100%;

height: 100vh;

background: #ffffff; /* 初始桌面背景颜色:白色 */

color: #333;

}

/* 顶栏 */

.header {

flex: 0 0 auto;

height: 60px;

background-color: #ffffff;

border-bottom: 1px solid #e0e0e0;

display: flex;

align-items: center;

justify-content: space-between;

padding: 0 20px;

box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);

}

.app-title {

font-size: 24px;

color: #333;

font-weight: 700;

display: flex;

align-items: center;

gap: 8px;

}

/* 可选:添加图标 */

.app-title::before {

content: "";

font-size: 28px;

}

/* 顶栏右侧图标分组 */

.header-icons {

display: flex;

align-items: center;

gap: 15px;

}

/* 按钮通用样式 */

.header-icons button,

.toolbox-body button,

.icon-btn,

.chat-input button {

cursor: pointer;

border: none;

outline: none;

border-radius: 5px;

transition: background-color 0.3s, color 0.3s;

}

/* 全屏按钮 */

.fullscreen-btn {

font-size: 22px;

color: #555;

background: #f0f0f0;

padding: 8px;

}

.fullscreen-btn:hover {

background: #e0e0e0;

color: #000;

}

/* 工具箱按钮 */

.toolbox-btn {

font-size: 22px;

color: #555;

background: #f0f0f0;

padding: 8px;

}

.toolbox-btn:hover {

background: #e0e0e0;

color: #000;

}

/* 工具箱(右侧浮层) */

.toolbox-container {

position: fixed;

top: 60px;

right: 0;

width: 320px;

height: calc(100% - 60px);

background: #ffffff;

border-left: 1px solid #e0e0e0;

box-shadow: -2px 0 5px rgba(0, 0, 0, 0.1);

display: flex;

flex-direction: column;

transform: translateX(100%);

transition: transform 0.3s ease;

z-index: 999;

}

.toolbox-container.show {

transform: translateX(0);

}

.toolbox-header {

font-size: 20px;

font-weight: 700;

padding: 20px;

border-bottom: 1px solid #e0e0e0;

background-color: #fafafa;

}

.toolbox-body {

flex: 1;

overflow-y: auto;

padding: 20px;

display: flex;

flex-direction: column;

gap: 15px;

}

.toolbox-body label {

font-size: 14px;

color: #555;

margin-bottom: 5px;

}

.toolbox-body input[type="text"],

.toolbox-body input[type="number"],

.toolbox-body input[type="color"] {

width: 100%;

height: 40px;

font-size: 14px;

padding: 0 10px;

border: 1px solid #dcdcdc;

border-radius: 5px;

transition: border-color 0.3s;

}

.toolbox-body input[type="text"]:focus,

.toolbox-body input[type="number"]:focus,

.toolbox-body input[type="color"]:focus {

border-color: #3367d6;

}

/* 按钮样式 */

.toolbox-body button {

height: 42px;

font-size: 16px;

background: #3367d6;

color: #ffffff;

border: none;

border-radius: 5px;

padding: 0 15px;

}

.toolbox-body button:hover {

background: #2851a3;

}

/* 清空聊天窗口按钮 */

#clearChatBtn {

background: #e53935;

}

#clearChatBtn:hover {

background: #c62828;

}

/* 聊天区 */

.chat-container {

flex: 1;

overflow-y: auto;

padding: 20px;

background: #ffffff; /* 初始桌面背景颜色:白色 */

}

.message-wrapper {

display: flex;

width: 100%;

margin-bottom: 15px;

}

.wrapper-user {

justify-content: flex-end;

}

.wrapper-ai {

justify-content: flex-start;

}

.chat-message {

display: inline-flex;

flex-direction: column;

padding: 12px 16px;

border: 1px solid #e0e0e0;

border-radius: 15px;

max-width: 70%;

word-wrap: break-word;

line-height: 1.5;

white-space: pre-wrap; /* 保留换行 */

background-color: #f9f9f9; /* 初始气泡背景:白色 */

color: #333; /* 初始字体颜色 */

box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);

position: relative;

}

/* 气泡箭头 */

.wrapper-user .chat-message::after {

content: '';

position: absolute;

top: 10px;

right: -10px;

border-width: 5px;

border-style: solid;

border-color: transparent transparent transparent #f9f9f9;

}

.wrapper-ai .chat-message::after {

content: '';

position: absolute;

top: 10px;

left: -10px;

border-width: 5px;

border-style: solid;

border-color: transparent #f9f9f9 transparent transparent;

}

/* 每条消息下方的图标区域 */

.message-actions {

display: flex;

justify-content: flex-end;

gap: 10px;

margin-top: 8px;

}

.icon-btn {

background: #f0f0f0;

color: #555;

padding: 6px;

border-radius: 4px;

transition: background-color 0.3s, color 0.3s;

}

.icon-btn:hover {

background: #e0e0e0;

color: #000;

}

/* 底部输入区 */

.chat-input {

flex: 0 0 auto;

display: flex;

padding: 15px 20px;

background: #ffffff;

border-top: 1px solid #e0e0e0;

box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.05);

}

.chat-input input {

flex: 1;

height: 50px;

font-size: 16px;

padding: 0 15px;

border: 1px solid #dcdcdc;

border-radius: 25px;

transition: border-color 0.3s;

}

.chat-input input:focus {

border-color: #3367d6;

outline: none;

}

.chat-input button {

width: 80px;

margin-left: 15px;

background: #3367d6;

color: #ffffff;

font-size: 16px;

border: none;

border-radius: 25px;

transition: background-color 0.3s;

}

.chat-input button:hover {

background: #2851a3;

}

/* 滚动条样式 */

::-webkit-scrollbar {

width: 8px;

}

::-webkit-scrollbar-thumb {

background-color: #cccccc;

border-radius: 4px;

}

/* 聊天记录列表 */

.history-list {

border-top: 1px solid #e0e0e0;

padding-top: 15px;

margin-top: 15px;

max-height: 150px;

overflow-y: auto;

}

.history-item {

display: flex;

justify-content: space-between;

align-items: center;

font-size: 14px;

border-bottom: 1px solid #f0f0f0;

padding: 8px 0;

word-break: break-all;

}

.history-item:last-child {

border-bottom: none;

}

.history-item button {

background: #e0e0e0;

color: #555;

padding: 4px 8px;

border-radius: 4px;

transition: background-color 0.3s, color 0.3s;

}

.history-item button:hover {

background: #c0c0c0;

color: #000;

}

</style>

</head>

<body>

<!-- 顶栏 -->

<div class="header">

<div class="app-title">DeepSeek</div>

<div class="header-icons">

<!-- 全屏按钮 -->

<button class="fullscreen-btn" id="fullscreenToggle" title="全屏"></button>

<!-- 工具箱按钮 -->

<button class="toolbox-btn" id="toolboxToggle" title="工具箱"></button>

</div>

</div>

<!-- 工具箱 -->

<div class="toolbox-container" id="toolboxContainer">

<div class="toolbox-header">工具箱</div>

<div class="toolbox-body">

<!-- 设置API Key -->

<div class="tool-section">

<label for="apiKeyInput">DeepSeek API Key</label>

<input id="apiKeyInput" type="text" placeholder="请输入 DeepSeek Key">

<button id="setKeyBtn">设置Key</button>

</div>

<!-- 设置记忆条数 -->

<div class="tool-section">

<label for="memoryLimit">记忆条数</label>

<input id="memoryLimit" type="number" min="1" max="999" placeholder="如:10">

<button id="setMemoryBtn">设置记忆</button>

</div>

<!-- 自定义颜色选项 -->

<div class="tool-section">

<label for="desktopColor">桌面背景颜色</label>

<input id="desktopColor" type="color" class="color-picker" value="#FFFFFF">

</div>

<div class="tool-section">

<label for="bubbleColorUser">用户气泡颜色</label>

<input id="bubbleColorUser" type="color" class="color-picker" value="#FFF0F0" />

</div>

<div class="tool-section">

<label for="bubbleColorAI">AI气泡颜色</label>

<input id="bubbleColorAI" type="color" class="color-picker" value="#F0FFF0" />

</div>

<div class="tool-section">

<label for="fontColor">字体颜色</label>

<input id="fontColor" type="color" class="color-picker" value="#333333" />

</div>

<button id="applyColorBtn">应用颜色</button>

<!-- 清空聊天窗口 -->

<button id="clearChatBtn">清空聊天窗口</button>

<!-- 聊天记录 -->

<div class="history-list">

<div style="font-weight: bold; margin-bottom: 8px;">聊天记录</div>

<div id="historyContainer"></div>

</div>

</div>

</div>

<!-- 聊天区 -->

<div id="chatContainer" class="chat-container"></div>

<!-- 底部输入框 -->

<div class="chat-input">

<input id="userInput" type="text" placeholder="请输入内容..." />

<button id="sendBtn">发送</button>

</div>

<script>

/************************************************************

* 全局变量 & DOM 获取

************************************************************/

let apiKey = "";

let memoryLimit = 10; // 默认记忆条数

const KEY_STORAGE = "DEEPSEEK_CHAT_HISTORY";

const COLOR_STORAGE = "DEEPSEEK_COLOR_CONFIG";

const toolboxToggle = document.getElementById("toolboxToggle");

const toolboxContainer = document.getElementById("toolboxContainer");

const apiKeyInput = document.getElementById("apiKeyInput");

const setKeyBtn = document.getElementById("setKeyBtn");

const memoryLimitInput = document.getElementById("memoryLimit");

const setMemoryBtn = document.getElementById("setMemoryBtn");

const clearChatBtn = document.getElementById("clearChatBtn");

const chatContainer = document.getElementById("chatContainer");

const userInput = document.getElementById("userInput");

const sendBtn = document.getElementById("sendBtn");

const historyContainer = document.getElementById("historyContainer");

// 自定义颜色相关

const desktopColorInput = document.getElementById("desktopColor");

const bubbleColorUserInput = document.getElementById("bubbleColorUser");

const bubbleColorAIInput = document.getElementById("bubbleColorAI");

const fontColorInput = document.getElementById("fontColor");

const applyColorBtn = document.getElementById("applyColorBtn");

// 全屏按钮

const fullscreenToggle = document.getElementById("fullscreenToggle");

// 聊天记录数组:[{role: "user"|"ai", content: "xxx", time: 167xxx }]

let chatHistory = [];

// 颜色配置(在本地缓存/读取)

let colorConfig = {

desktopColor: "#FFFFFF",

bubbleColorUser: "#FFF0F0",

bubbleColorAI: "#F0FFF0",

fontColor: "#333333"

};

/************************************************************

* 页面初始化

************************************************************/

window.addEventListener("DOMContentLoaded", () => {

// 从 localStorage 加载聊天记录

const saved = localStorage.getItem(KEY_STORAGE);

if (saved) {

try {

chatHistory = JSON.parse(saved);

} catch (e) {

console.warn("解析本地聊天记录失败:", e);

}

}

// 从 localStorage 加载颜色配置

const savedColor = localStorage.getItem(COLOR_STORAGE);

if (savedColor) {

try {

colorConfig = JSON.parse(savedColor);

} catch (e) {

console.warn("解析本地颜色配置失败:", e);

}

}

// 渲染历史 & 更新界面颜色

renderChatFromHistory();

renderHistoryList();

applyColorConfig(); // 应用颜色设置到界面

// 同步颜色选择器

desktopColorInput.value = colorConfig.desktopColor;

bubbleColorUserInput.value = colorConfig.bubbleColorUser;

bubbleColorAIInput.value = colorConfig.bubbleColorAI;

fontColorInput.value = colorConfig.fontColor;

});

/************************************************************

* 顶栏相关按钮

************************************************************/

// 全屏

fullscreenToggle.addEventListener("click", () => {

if (!document.fullscreenElement) {

document.documentElement.requestFullscreen();

} else if (document.exitFullscreen) {

document.exitFullscreen();

}

});

// 显示 / 隐藏工具箱

toolboxToggle.addEventListener("click", () => {

toolboxContainer.classList.toggle("show");

});

/************************************************************

* 工具箱交互

************************************************************/

// 设置 Key

setKeyBtn.addEventListener("click", () => {

const keyVal = apiKeyInput.value.trim();

if (!keyVal) {

alert("请输入有效的 DeepSeek Key");

return;

}

apiKey = keyVal;

alert("Key 设置成功!");

});

// 设置记忆条数

setMemoryBtn.addEventListener("click", () => {

const val = parseInt(memoryLimitInput.value, 10);

if (isNaN(val) || val < 1) {

alert("请输入正确的记忆条数");

return;

}

memoryLimit = val;

alert(`记忆条数已设置为:${memoryLimit}`);

});

// 应用颜色

applyColorBtn.addEventListener("click", () => {

colorConfig.desktopColor = desktopColorInput.value;

colorConfig.bubbleColorUser = bubbleColorUserInput.value;

colorConfig.bubbleColorAI = bubbleColorAIInput.value;

colorConfig.fontColor = fontColorInput.value;

// 应用到页面

applyColorConfig();

// 保存到 localStorage

localStorage.setItem(COLOR_STORAGE, JSON.stringify(colorConfig));

});

// 清空聊天窗口(不删除历史)

clearChatBtn.addEventListener("click", () => {

chatContainer.innerHTML = "";

});

/************************************************************

* 发送消息

************************************************************/

sendBtn.addEventListener("click", async () => {

const content = userInput.value.trim();

if (!content) return;

if (!apiKey) {

alert("请先在工具箱中设置 DeepSeek Key!");

return;

}

// 先渲染用户消息

addMessage(content, "user");

userInput.value = "";

// 构建带有“如果回答中涉及数学公式,请使用 $...$ 或 $...$ 标记”的 system 提示

const systemPrompt = "You are a helpful assistant. If your answer involves math formulas, please use $...$ or $...$ to mark the formula.";

// 将最近 memoryLimit 条对话一起发送给 DeepSeek

const messagesToSend = buildChatMessages(systemPrompt, content);

// 向 DeepSeek 发送请求

try {

const response = await fetch("https://api.deepseek.com/v1/chat/completions", {

method: "POST",

headers: {

"Content-Type": "application/json",

"Authorization": `Bearer ${apiKey}`

},

body: JSON.stringify({

model: "deepseek-chat",

messages: messagesToSend

})

});

if (!response.ok) {

throw new Error(`请求失败,状态码: ${response.status}`);

}

const result = await response.json();

let aiReply = result?.choices?.[0]?.message?.content || "AI 未返回有效的消息。";

// 去除多余符号:★☆*# 等

aiReply = aiReply.replace(/[★☆*#]/g, "");

// 逐字打字

addMessage(aiReply, "ai", true);

} catch (err) {

console.error(err);

addMessage("请求失败,请检查 Key、网络或模型。", "ai");

}

});

/************************************************************

* 构建聊天上下文

************************************************************/

function buildChatMessages(systemPrompt, lastUserContent) {

// 1. 先放一个系统提示

const messages = [

{ role: "system", content: systemPrompt }

];

// 2. 获取最近 memoryLimit 条非 system 消息(含 user + ai)

const relevantMsgs = [];

for (let i = chatHistory.length - 1; i >= 0 && relevantMsgs.length < memoryLimit; i--) {

const msg = chatHistory[i];

if (msg.role === "user") {

relevantMsgs.push({ role: "user", content: msg.content });

} else if (msg.role === "ai") {

relevantMsgs.push({ role: "assistant", content: msg.content });

}

}

// 取完后要反转一下顺序(因为我们是从后往前取)

relevantMsgs.reverse();

// 3. 把这些消息推到 messages 数组中

messages.push(...relevantMsgs);

// 4. 最后再加上本次用户输入

messages.push({ role: "user", content: lastUserContent });

return messages;

}

/************************************************************

* 添加消息到屏幕 & 保存记录

************************************************************/

function addMessage(text, role, typed = false) {

// 存到 chatHistory

const messageData = { role, content: text, time: Date.now() };

chatHistory.push(messageData);

// 渲染当前消息到屏幕

renderSingleMessage(role, text, typed);

// 保存到 localStorage

localStorage.setItem(KEY_STORAGE, JSON.stringify(chatHistory));

// 重新渲染聊天记录列表

renderHistoryList();

}

/************************************************************

* 在屏幕渲染单条消息(可选 逐字打字 + MathJax 渲染)

************************************************************/

function renderSingleMessage(role, text, typed) {

const wrapper = document.createElement("div");

wrapper.classList.add("message-wrapper", role === "user" ? "wrapper-user" : "wrapper-ai");

const msgDiv = document.createElement("div");

msgDiv.classList.add("chat-message");

// 文字部分

const textSpan = document.createElement("span");

textSpan.classList.add("message-text");

// 图标按钮区域

const actionsDiv = document.createElement("div");

actionsDiv.classList.add("message-actions");

// 复制按钮

const copyBtn = document.createElement("button");

copyBtn.classList.add("icon-btn");

copyBtn.innerHTML = ""; // 剪贴板图标

copyBtn.title = "复制";

copyBtn.onclick = () => {

navigator.clipboard.writeText(text)

.then(() => alert("复制成功!"))

.catch(() => alert("复制失败,请手动复制。"));

};

// 删除按钮

const delBtn = document.createElement("button");

delBtn.classList.add("icon-btn");

delBtn.innerHTML = ""; // 垃圾桶图标

delBtn.title = "删除";

delBtn.onclick = () => {

// 找到当前消息在 chatHistory 中的索引

const index = chatHistory.findIndex(msg => msg.content === text && msg.role === role);

if (index !== -1) {

chatHistory.splice(index, 1);

localStorage.setItem(KEY_STORAGE, JSON.stringify(chatHistory));

renderHistoryList();

renderChatFromHistory();

}

};

actionsDiv.appendChild(copyBtn);

actionsDiv.appendChild(delBtn);

msgDiv.appendChild(textSpan);

msgDiv.appendChild(actionsDiv);

wrapper.appendChild(msgDiv);

chatContainer.appendChild(wrapper);

// 逐字打字

if (typed) {

let idx = 0;

const timer = setInterval(() => {

textSpan.textContent += text.charAt(idx);

idx++;

scrollToBottom();

if (idx >= text.length) {

clearInterval(timer);

// 打字结束后进行公式渲染

if (window.MathJax) {

MathJax.typesetPromise([textSpan]).catch(err => console.log(err));

}

}

}, 30);

} else {

// 无需逐字打字,直接赋值

textSpan.textContent = text;

scrollToBottom();

// 直接公式渲染

if (window.MathJax) {

MathJax.typesetPromise([textSpan]).catch(err => console.log(err));

}

}

// 应用最新颜色(可能每次新消息都需要重新应用)

applyColorConfig();

}

/************************************************************

* 从历史记录渲染到屏幕

************************************************************/

function renderChatFromHistory() {

chatContainer.innerHTML = "";

chatHistory.forEach(msg => {

// 不渲染 system 的消息

if (msg.role === "system") return;

renderSingleMessage(msg.role, msg.content, false);

});

}

/************************************************************

* 聊天记录:渲染到“工具箱”

************************************************************/

function renderHistoryList() {

historyContainer.innerHTML = "";

chatHistory.forEach((item, idx) => {

if (item.role === "system") return;

const row = document.createElement("div");

row.classList.add("history-item");

const t = new Date(item.time);

const timeStr = t.toLocaleTimeString("zh-CN", { hour12: false })

+ " " + t.toLocaleDateString("zh-CN");

const shortContent = item.content.length > 30

? item.content.slice(0, 30) + "..."

: item.content;

row.innerHTML = `

<div style="flex:1;">

[${item.role === "user" ? "用户" : "AI"}] ${shortContent}

<div style="font-size:12px;color:#999;">${timeStr}</div>

</div>

`;

const delBtn = document.createElement("button");

delBtn.textContent = "删除";

delBtn.onclick = () => {

chatHistory.splice(idx, 1);

localStorage.setItem(KEY_STORAGE, JSON.stringify(chatHistory));

renderHistoryList();

renderChatFromHistory();

};

row.appendChild(delBtn);

historyContainer.appendChild(row);

});

}

/************************************************************

* 滚动到底部

************************************************************/

function scrollToBottom() {

chatContainer.scrollTop = chatContainer.scrollHeight;

}

/************************************************************

* 应用颜色配置

************************************************************/

function applyColorConfig() {

// 桌面背景

chatContainer.style.backgroundColor = colorConfig.desktopColor;

// 所有聊天气泡

const allMessages = document.querySelectorAll(".chat-message");

allMessages.forEach(msgDiv => {

// 判断是 user 还是 ai

const wrapper = msgDiv.parentElement;

if (wrapper.classList.contains("wrapper-user")) {

msgDiv.style.backgroundColor = colorConfig.bubbleColorUser;

} else {

msgDiv.style.backgroundColor = colorConfig.bubbleColorAI;

}

msgDiv.style.color = colorConfig.fontColor;

});

}

</script>

</body>

</html>

相关推荐

MySQL慢查询优化:从explain到索引,DBA手把手教你提升10倍性能

数据库性能是应用系统的生命线,而慢查询就像隐藏在系统中的定时炸弹。某电商平台曾因一条未优化的SQL导致订单系统响应时间从200ms飙升至8秒,最终引发用户投诉和订单流失。今天我们就来系统学习MySQL...

一文读懂SQL五大操作类别(DDL/DML/DQL/DCL/TCL)的基础语法

在SQL中,DDL、DML、DQL、DCL、TCL是按操作类型划分的五大核心语言类别,缩写及简介如下:DDL(DataDefinitionLanguage,数据定义语言):用于定义和管理数据库结构...

闲来无事,学学Mysql增、删,改,查

Mysql增、删,改,查1“增”——添加数据1.1为表中所有字段添加数据1.1.1INSERT语句中指定所有字段名语法:INSERTINTO表名(字段名1,字段名2,…)VALUES(值1...

数据库:MySQL 高性能优化规范建议

数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,...

下载工具合集_下载工具手机版

迅雷,在国内的下载地位还是很难撼动的,所需要用到的地方还挺多。缺点就是不开会员,软件会限速。EagleGet,全能下载管理器,支持HTTP(S)FTPMMSRTSP协议,也可以使用浏览器扩展检测...

mediamtx v1.15.2 更新详解:功能优化与问题修复

mediamtxv1.15.2已于2025年10月14日发布,本次更新在功能、性能优化以及问题修复方面带来了多项改进,同时也更新了部分依赖库并提升了安全性。以下为本次更新的详细内容:...

声学成像仪:泄露监测 “雷达” 方案开启精准防控

声学成像仪背景将声像图与阵列上配装的摄像实所拍的视频图像以透明的方式叠合在一起,就形成了可直观分析被测物产生状态。这种利用声学、电子学和信息处理等技术,变换成人眼可见的图像的技术可以帮助人们直观地认识...

最稳存储方案:两种方法将摄像头接入威联通Qu405,录像不再丢失

今年我家至少被4位邻居敲门,就是为了查监控!!!原因是小区内部监控很早就停止维护了,半夜老有小黄毛掰车门偷东西,还有闲的没事划车的,车主损失不小,我家很早就配备监控了,人来亮灯有一定威慑力,不过监控设...

离岗检测算法_离岗检查内容

一、研发背景如今社会许多岗位是严禁随意脱离岗位的,如塔台、保安室、监狱狱警监控室等等,因为此类行为可能会引起重大事故,而此类岗位监督管理又有一定困难,因此促生了智能视频识别系统的出现。二、产品概述及工...

消防安全通道占用检测报警系统_消防安全通道占用检测报警系统的作用

一、产品概述科缔欧消防安全通道占用检测报警系统,是创新行业智能监督管理方式、完善监管部门动态监控及预警预报体系的信息化手段,是实现平台远程监控由“人为监控”向“智能监控”转变的必要手段。产品致力于设...

外出住酒店、民宿如何使用手机检测隐藏的监控摄像头

最近,一个家庭在他们的民宿收到了一个大惊喜:客厅里有一个伪装成烟雾探测器的隐藏摄像头,监视着他们的一举一动。隐藏摄像头的存在如果您住在酒店或民宿,隐藏摄像头不应再是您的担忧。对于民宿,房东应报告所有可...

基于Tilera众核平台的流媒体流量发生系统的设计

曾帅,高宗彬,赵国锋(重庆邮电大学通信与信息工程学院,重庆400065)摘要:设计了一种基于Tilera众核平台高强度的流媒体流量发生系统架构,其主要包括:系统界面管理模块、服务承载模块和流媒体...

使用ffmpeg将rtsp流转流实现h5端播放

1.主要实现rtsp转tcp协议视频流播放ffmpeg下载安装(公认业界视频处理大佬)a、官网地址:www.ffmpeg.org/b、gitHub:github.com/FFmpeg/FFmp…c、推...

将摄像头视频流从Rtsp协议转为websocket协议

写在前面很多通过摄像头拿到的视频流格式都是Rtsp协议的,比如:海康威视摄像头。在现代的浏览器中,已经不支持直接播放Rtsp视频流,而且,海康威视提供的本身的webSdk3.3.0视频插件有很多...

华芸科技推出安全监控中心2.1 Beta测试版

全球独家支持hdmi在线实时监看摄像机画面,具单一、循环或同时监看四频道视频影像,可透过华芸专用红外线遥控器、airemote或是键盘鼠标进行操作,提供摄像机频道增购服务,满足用户弹性扩增频道需...