博主越学越觉得自己垃圾,想来20多了,还是一个无法经济独立的垃圾
新建个帖子,再次巩固一下自己的学习的内容,提高一下自己。
什么是BVDHNDL
这是目前比较流行的几个框架的缩写
Bootstarp
Vue.js
Djanjo
Hbase
Nginx
Docker
Linux
编写过程中的阶段性代码
tfjs ssd 物体检测
https://code.aliyun.com/734449600/tfjscocossd/repository/archive.zip?ref=master`
下载代码后 运行 index.html 即可
docker 查看查看效果部署服务器
docker run -p 10080:80 -d --name tfjsssd registry.cn-hangzhou.aliyuncs.com/mkmk/nginx:tfjsssd
访问10080 端口
效果
构建过程主要命令
docker cp C:\Users\73444\Desktop\githubstudy\tfjscocossd\tfjs tfjsssd:/ docker cp C:\Users\73444\Desktop\111\nginx.conf tfjsssd:/etc/nginx/nginx.conf docker commit tfjsssd registry.cn-hangzhou.aliyuncs.com/mkmk/nginx:tfjsssd docker push registry.cn-hangzhou.aliyuncs.com/mkmk/nginx:tfjsssd
记录一个nginx 代理单个html
nginx.config
user nginx; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name _ ; #配置跨域 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; root /tfjs/; index index.html; } }
他们有什么联系
Bootstarp 样式好看前端ui,Vue 绑定数据发送前端请求 ,Django 后台响应数据 ,
Hbase 是个容量很大的数据库 ,Nginx 是前端代理工具 ,Docker 是部署开发工具 , Linux 是服务器的操作系统
Bootstarp and vue
学习官网 https://bootstrap-vue.js.org/
安装npm
安装yarn
国外镜像不可用
yarn config set registry https://registry.npm.taobao.org -g
yarn add vue bootstrap-vue bootstrap
创建vue-cli3 项目 并 引入 bootstrap
下载编辑器Hbuildx ,
创建vue项目,导入 vue-router
目录结构如下
安装jQuery
bootstrap是基于jQuery的,在使用之前我们先安装一下jQuery包
自己手动添加也可以
yarn install jquery -S
install -S -D -g 有什么区别
npm install module_name -S 即 npm install module_name --save 写入dependencies
npm install module_name -D 即 npm install module_name --save-dev 写入devDependencies
npm install module_name -g 全局安装(命令行使用)
npm install module_name 本地安装(将安装包放在 ./node_modules 下)
/* *Vue-CLI项目的核心配置文件 */ const webpack = require("webpack"); module.exports = { configureWebpack: { plugins: [ new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery", "window.jQuery": "jquery", Popper: ["popper.js", "default"] }) ] } };
安装bootstrap
yarn install bootstrap
在main.js中导入bootstrap
import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' // 导入bootstrap import "bootstrap" import "bootstrap/dist/css/bootstrap.css" Vue.config.productionTip = false new Vue({ router, store, render: h => h(App) }).$mount('#app')
测试vue-cli中是否已经导入了bootstrap
新建 mybs1.vue 配置路由后查看效果, 文件摘自菜鸟教程
<template> <div> <div class="jumbotron text-center" style="margin-bottom:0"> <h1>我的第一个 Bootstrap 4 页面</h1> <p>重置浏览器窗口大小查看效果!</p> </div> <nav class="navbar navbar-expand-sm bg-dark navbar-dark"> <a class="navbar-brand" href="#">导航</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="collapsibleNavbar"> <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link" href="#">链接</a> </li> <li class="nav-item"> <a class="nav-link" href="#">链接</a> </li> <li class="nav-item"> <a class="nav-link" href="#">链接</a> </li> </ul> </div> </nav> <div class="container" style="margin-top:30px"> <div class="row"> <div class="col-sm-4"> <h2>关于我</h2> <h5>我的照片:</h5> <div class="fakeimg">这边插入图像</div> <p>关于我的介绍..</p> <h3>一些链接</h3> <p>说明文本</p> <ul class="nav nav-pills flex-column"> <li class="nav-item"> <a class="nav-link active" href="#">激活状态</a> </li> <li class="nav-item"> <a class="nav-link" href="#">链接</a> </li> <li class="nav-item"> <a class="nav-link" href="#">链接</a> </li> <li class="nav-item"> <a class="nav-link disabled" href="#">禁用</a> </li> </ul> <hr class="d-sm-none"> </div> <div class="col-sm-8"> <h2>标题</h2> <h5>副标题</h5> <div class="fakeimg">图像</div> <p>一些文本..</p> <p>菜鸟教程,学的不仅是技术,更是梦想!!!菜鸟教程,学的不仅是技术,更是梦想!!!菜鸟教程,学的不仅是技术,更是梦想!!!</p> <br> <h2>标题</h2> <h5>副标题</h5> <div class="fakeimg">图像</div> <p>一些文本..</p> <p>菜鸟教程,学的不仅是技术,更是梦想!!!菜鸟教程,学的不仅是技术,更是梦想!!!菜鸟教程,学的不仅是技术,更是梦想!!!</p> </div> </div> </div> <div class="jumbotron text-center" style="margin-bottom:0"> <p>底部内容</p> </div> </div> </template> <script> export default{ name: 'mybs1', data:function () { return { a:"12223", b:["asdfg"] }; }, mounted(){ this.a +="444" this.a=this.addstr(this.a,this.b[0]) // that.a = "232323" }, methods:{ addstr: function(str1,str2){ var str3=str1+str2 return str3 } } } </script> <style> </style>
html最小化引入bootstrap
关键的是结尾三句
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Bootstrap 模板</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- 引入 Bootstrap --> <link href="./css/bootstrap.min.css" rel="stylesheet"> <script src="./js/jquery-3.4.1.min.js"></script> <script src="./js/bootstrap.min.js"></script> </head>
vue引入样式
在vue中引入外部的css文件
在项目的src文件下,新建一个style文件夹,存放css文件。
1.全局引入
将外部的css文件放到style文件下,引入外部文件只需在main.js文件中
import './style/reset.css'
我引入的是清除默认样式的css文件
2.局部引入
<style scoped> @import '../assets/iconfont/iconfont.css';这个分号一定要写,要不会报错 </style>
vue数据初始化,监听加载完成,以及定义js方法
<template> <div>js方法拼接改变a的内容{{a}}</div> </template> <script> export default{ //这个vue的唯一名称 name: 'mybs1', //初始化的数据 data:function () { return { a:"12223", b:["asdfg"] }; }, //监听页面完成 mounted(){ this.a +="444" this.a=this.addstr(this.a,this.b[0]) // that.a = "232323" }, //本页的js方法 methods:{ addstr: function(str1,str2){ var str3=str1+str2 return str3 } } } </script> <style> </style>
如何取消url中的#号
#号是特殊字符,不利于最后投入生产环境
在router.js 中添加 mode:“history”, 即可删除url中的#号
export default new Router({ mode:"history",
一个完整的router.js 文件
import Vue from 'vue' import Router from 'vue-router' import Home from './views/Home.vue' import Page1 from './views/page1.vue' import Mybs1 from './views/mybs1.vue' Vue.use(Router) export default new Router({ mode:"history", routes: [ { path: '/', name: 'home', component: Home } ] })
bootstrap 常用元素样式
平均宽度,平均高度
指定 class col 平均高度, 指定row 平均宽度
<div class="row"> <div class="col">1</div> <div class="col">1</div> <div class="col">1</div> </div> <div class="row"> <div class="col">1</div> <div class="col">1</div> <div class="col">1</div> </div>
字体
<h1> - <h6> 标题 <元素名称 class="display-1" > 获得更大字体 <small> 文字 </small> 获得较小文字 <mark> 高亮显示内容 </mark> 默认黄色的 <abbr> 下滑虚线 </abbr> <blockquote> 引用内容 </blockquote> 自动添加--引用符号,并默认浅色字体 <code>span</code>,和 <code>div</code> 转义关键字 <kbd>ctrl + p</kbd> 纯黑色关键提醒字体 <pre>段落</pre> 保持换行 <pre class="pre-scrollable">文章</pre> 使 <pre> 元素可滚动,代码块区域最大高度为340px,一旦超出这个高度,就会在Y轴出现滚动条
颜色
字体颜色
<p class="text-muted">柔和的文本。</p> <p class="text-primary">重要的文本。</p> <p class="text-success">执行成功的文本。</p> <p class="text-info">代表一些提示信息的文本。</p> <p class="text-warning">警告文本。</p> <p class="text-danger">危险操作文本。</p> <p class="text-secondary">副标题。</p> <p class="text-dark">深灰色文字。</p> <p class="text-light">浅灰色文本(白色背景上看不清楚)。</p> <p class="text-white">白色文本(白色背景上看不清楚)。</p>
背景颜色
<p class="bg-primary text-white">重要的背景颜色。</p> <p class="bg-success text-white">执行成功背景颜色。</p> <p class="bg-info text-white">信息提示背景颜色。</p> <p class="bg-warning text-white">警告背景颜色</p> <p class="bg-danger text-white">危险背景颜色。</p> <p class="bg-secondary text-white">副标题背景颜色。</p> <p class="bg-dark text-white">深灰背景颜色。</p> <p class="bg-light text-dark">浅灰背景颜色。</p>
常用表格属性
class="table" 默认 table-dark 黑色 table-hover 带悬停 table-striped 条纹 table-bordered 边框
<table class="table table-dark table-hover"> <thead> <tr> <th>Firstname</th> </tr> </thead> <tbody> <tr> <td>John</td> </tr> <tr> <td>Mary</td> </tr> <tr> <td>July</td> </tr> </tbody> </table>
图片
自适应图片,自动调节大小 <img src="https://paris.jpg" class="img-fluid"> .class="rounded" 类可以让图片显示圆角 class="rounded-circle" 椭圆图片
背景框
<div class="jumbotron"></div> 没有圆角的全屏幕,可以在 .jumbotron-fluid 类
设置与关闭提示消息框
class="alert alert-info" .alert 类, 后面加上 .alert-success, 成功 .alert-info, 消息 .alert-warning, 警告 .alert-danger, 危险 .alert-primary, 重要 .alert-secondary, 次要 .alert-light 亮色 .alert-dark 暗色
× 是 HTML 的符号(其实是乘号),看起来像 x
关闭提示框
<div class="alert alert-success alert-dismissible"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>成功!</strong> 指定操作成功提示信息。 </div>
各种按钮
按钮也可用于 按钮类可用于 , , 或 元素上:
btn-outline-描述 仅仅把边框变成什么颜色
<button type="button" class="btn">基本按钮</button> <button type="button" class="btn btn-primary">主要按钮</button> <button type="button" class="btn btn-secondary">次要按钮</button> <button type="button" class="btn btn-success">成功</button> <button type="button" class="btn btn-info">信息</button> <button type="button" class="btn btn-warning">警告</button> <button type="button" class="btn btn-danger">危险</button> <button type="button" class="btn btn-dark">黑色</button> <button type="button" class="btn btn-light">浅色</button> <button type="button" class="btn btn-link">链接</button>
定义一组按钮
-sm 表示小号按钮, -lg表示大号按钮 <div class="btn-group btn-group-sm">
垂直按钮组以及下拉菜单
class="btn-group-vertical" 垂直按钮组 toggle 切换 <div class="btn-group"> <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> 下来菜单标题 </button> <div class="dropdown-menu"> <a class="dropdown-item" href="#">菜单内容一</a> <a class="dropdown-item" href="#">菜单内容二</a> </div> </div>
徽章
<span class="badge badge-pill badge-default">默认</span> <span class="badge badge-pill badge-primary">主要</span> <span class="badge badge-pill badge-success">成功</span> <span class="badge badge-pill badge-info">信息</span> <span class="badge badge-pill badge-warning">警告</span> <span class="badge badge-pill badge-danger">危险</span>
进度条
<div class="progress"> <div class="progress-bar" style="width:70%">70%</div> </div> class="progress-bar progress-bar-striped progress-bar-animated" 动画进度条 可以带上 bg-success 属性切换背景颜色
常用分页
<ul class="pagination"> <li class="page-item"><a class="page-link" href="#">Previous</a></li> <li class="page-item"><a class="page-link" href="#">1</a></li> <li class="page-item active"><a class="page-link" href="#">2</a></li> <li class="page-item"><a class="page-link" href="#">3</a></li> <li class="page-item"><a class="page-link" href="#">Next</a></li> </ul>
模态框
fade 添加出现以及消失的动画 ``` 打开模态框
<!-- 模态框头部 --> <div class="modal-header"> <h4 class="modal-title">模态框头部</h4> <button type="button" class="close" data-dismiss="modal">×</button> </div> <!-- 模态框主体 --> <div class="modal-body"> 模态框内容.. </div> <!-- 模态框底部 --> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button> </div> </div>
``` ### 可隐藏导航栏
开始我们的应用
我们来做一个安全帽识别的网页应用吧
wz_jsgraphics.js 在图片上画直线、圆、矩形
导入tfjs.js
使用JavaScript进行基本图形操作与处理
//创建图片 从组件中获取url var img1=new Image(); //jqury获取方法 img1.url=$("#inputimg1").attr("src"); //原生js获取方法 const img0 = document.getElementById('inputimg1'); img1.url=img.src;
求png图片反值完整代码
//获得img对象 const img = document.getElementById('inputimg1'); //创建画布 var myCanvas = document.createElement("canvas"); //实现 缩放 var defaultsize=1500; myCanvas.width = defaultsize; myCanvas.height = defaultsize; var context1 = myCanvas.getContext('2d'); //根据图片大小缩放画布 context1.scale(defaultsize/img.width,defaultsize/img.height); //加载图片 到 画布 context1.drawImage(img,0,0); console.log("canvas",myCanvas); var imgdata = context1.getImageData(0, 0, defaultsize, defaultsize); //求图片反值 000 是纯黑 255 255 255 是纯白 for(var i=0, len= imgdata.data.length; i<len; i+=4) { imgdata.data[i] = 255-imgdata.data[i]; imgdata.data[i+1] = 255-imgdata.data[i+1]; imgdata.data[i+2] = 255-imgdata.data[i+2]; } // 把数据返回到 画布上 context1.putImageData(imgdata, 0,0); console.log("imgdata",imgdata); var resimgurl = myCanvas.toDataURL(); $("#resimg1").attr("src",resimgurl); // document.getElementById('resimg1').src = resimgurl; console.log("结果图像url",resimgurl);
效果
获取图片真实大小
画布一定要指定真实大小否则会出错
function getData64urldrawbox(img,boxes) var myCanvas = document.createElement("canvas"); myCanvas.width=img.naturalWidth; myCanvas.height=img.naturalHeight;
前端核心代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="./css/bootstrap.min.css" rel="stylesheet"> <script src="./js/jquery-3.4.1.min.js"></script> <script src="./js/bootstrap.min.js"></script> </head> <body> <!--<nav class="navbar navbar-expand-md bg-dark navbar-dark">--> <div class="row bg-secondary"> <div class="col-2 "> <nav class="navbar bg-dark navbar-dark"> <a class="navbar-brand" href="#">菜单</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> </nav> </div> <div class="col-10 d-flex flex-row-reverse " > <nav class="navbar navbar-expand-sm bg-secondary navbar-dark"> <ul class="navbar-nav "> <li class="nav-item"> <a class="nav-link text-white" href="#">关于</a> </li> <li class="nav-item"> <a class="nav-link text-white" href="#">帮助</a> </li> <li class="nav-item"> <a class="nav-link text-white" href="#">登录</a> </li> </ul> </nav> </div> </div> <div class="row bg-light"> <div class="col-3 collapse navbar-collapse bg-dark navbar-dark" id="collapsibleNavbar"> <ul class="navbar-nav"> <li class="nav-item"> <a class="nav-link" href="#">选择图像</a> </li> <li class="nav-item"> <a class="nav-link" href="#">拍摄</a> </li> <li class="nav-item"> <a class="nav-link" href="#">识别记录</a> </li> </ul> </div> <div class="col-9"> <div class="d-flex flex-row"> <div class="col-5 offset-1"> <!-- <p>图片在头部 (card-img-top):</p> --> <div class="card "> <img id="inputimg1" class="card-img-top" src="https://static.runoob.com/images/mix/img_avatar.png" alt="Card image" style="width:100%"> <div class="card-body"> <h4 class="card-title">原图像</h4> <p class="card-text">输入图像,应当清晰,明亮</p> <input id="input1" type="file" /> <script type="text/javascript"> $('#input1').change(function(){ $('#inputimg1').attr("src",URL.createObjectURL($(this)[0].files[0] )); }); </script> <a href="https://static.runoob.com/images/mix/img_avatar.png" target="_blank" class="btn btn-primary">上传识别</a> </div> </div> </div> <div class="col-5 "> <!-- <p>图片在头部 (card-img-top):</p> --> <div class="card " > <img class="card-img-top" src="https://static.runoob.com/images/mix/img_avatar.png" alt="Card image" style="width:100%"> <div class="card-body"> <h4 class="card-title">识别图像</h4> <p class="card-text">识别结果分为person和hat</p> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal"> 放大图片 </button> <div class="modal fade" id="myModal"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <!-- 模态框头部 --> <div class="modal-header"> <h4 class="modal-title">模态框头部</h4> <button type="button" class="close" data-dismiss="modal">×</button> </div> <!-- 模态框主体 --> <div class="modal-body"> <img class="card-img-top" src="https://static.runoob.com/images/mix/img_avatar.png" alt="Card image" style="width:100%"> </div> <!-- 模态框底部 --> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button> </div> </div> </div> </div> </div> </div> </div> <div class="col-5 "> <div class="alert alert-success"> 带头盔人数 <strong>10</strong> </div> <div class="alert alert-warning"> 未带头盔人数 <strong>3</strong> </div> <div class="alert alert-danger"> <strong>没有识别结果!</strong> </div> </div> </div> </div> </div> </body> </html>