BVDHNDL 学习贴

简介: BVDHNDL 学习贴

博主越学越觉得自己垃圾,想来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

https://nodejs.org/en/

安装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">&times;</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">&times;</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">&times;</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>




相关文章
|
7月前
|
数据采集 机器学习/深度学习 数据可视化
分享68个Python爬虫源码总有一个是你想要的
分享68个Python爬虫源码总有一个是你想要的
220 0
|
6月前
|
JSON 小程序 JavaScript
技术心得记录:小爱童鞋@你,一起来撸个小程序吧
技术心得记录:小爱童鞋@你,一起来撸个小程序吧
53 0
|
7月前
|
数据采集 数据可视化 Java
分享66个Python爬虫源码总有一个是你想要的
分享66个Python爬虫源码总有一个是你想要的
247 1
|
算法 定位技术
连连看核心算法与基本思想(附全部项目代码链接与代码详细注释)
连连看核心算法与基本思想(附全部项目代码链接与代码详细注释)
396 0
【教程】好多好看好酷的代码注释,喜欢就选一个;还可以将自己喜欢的图片一键生成代码注释
【教程】好多好看好酷的代码注释,喜欢就选一个;还可以将自己喜欢的图片一键生成代码注释
|
开发者 C++
微信不够好看的地方,只能自己来动手了 | 公众号卡片美化
微信不够好看的地方,只能自己来动手了 | 公众号卡片美化
|
程序员
不会写技术贴,怎么办?
不会写技术贴,怎么办?
|
缓存 Java 数据库连接
Myabtis源码如何阅读,教你一招!!!
Myabtis源码如何阅读,教你一招!!!
|
安全 Java 数据库
10分钟完成补充个人博客留言设计贴功能
10分钟完成补充个人博客留言设计贴功能
145 0
10分钟完成补充个人博客留言设计贴功能
|
安全 JavaScript 程序员
写好代码需要举一反三
如何让代码写的更安全高效一直是程序员的不懈追求!在解决问题的同时,简介清爽,逻辑严谨的代码会让程序员更带光环。 简书亦有简码
213 0
写好代码需要举一反三