deeplearning.36车辆识别YOLO算法实践

article/2025/9/28 16:11:05

车辆识别

  • 下载相关资料
  • 导入相关包
  • 数据集定义
  • YOLO
    • 模型细节
    • 分类阈值过滤
    • 非最大值抑制
    • 非最大值抑制函数
    • 对所有框进行过滤
  • 测试训练好的yolo模型
    • 定义分类、锚框、图像维度
    • 加载已经训练好的模型
    • 模型的输出转换为边界框
    • 过滤锚框
    • 实际图像中运行计算图
    • 实际预测一下

下载相关资料

下载本次汽车驾驶识别所需要的资料。下载地址

导入相关包

使用jupyter,新建文件夹,文件夹下新建一个jupyter文件,下载的相关资料也放入该文件夹中。在jupyter文件中输入以下代码。

import argparse
import os
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow
import scipy.io
import scipy.misc
import numpy as np
import pandas as pd
import PIL
import tensorflow as tf
from keras import backend as K
from keras.layers import Input, Lambda, Conv2D
from keras.models import load_model, Modelfrom yad2k.models.keras_yolo import yolo_head, yolo_boxes_to_corners, preprocess_true_boxes, yolo_loss, yolo_body
import yolo_utils

数据集定义

数据集是很多标记的汽车图片。pc是物体在方框内存在的置信度,c是分类,c=3是类别为汽车。在这里插入图片描述

YOLO

YOLO (“you only look once”)是一个很受欢迎的算法,因为它可以在实现高精度的同时能实时运行。网络仅需要进行一次正向传播便可预测,因此说该算法“仅看一次图像”。在非极大值抑制之后,模型将同边界框一起输出识别到的目标。

模型细节

  • 输入的批量图片的维度为(m,608,608,3)
  • 输出是一个识别分类与边界框的列表。每个边界框由6个数字组成:(pc,bx,by,bh,bw,c)如果你将 c 放到80维的向量中,那么每个边界框就由85个数字组成。
    YOLO的架构可以被视为以下结构,我们使用了五个锚框(它以每个像素为中心生成多个大小和宽高比不同的边界框。这些边界框被称为锚框。),IMAGE (m, 608, 608, 3) -> DEEP CNN -> ENCODING (m, 19, 19, 5, 85)。
    在这里插入图片描述
    我们也使用了5个锚框,19x19的单元格,所以每个单元格内有5个锚框的编码信息,锚框的组成是pc+px+py+ph+pw。
    对于每个单元格的每个锚框而言,我们将计算下列元素的乘积,并提取该框包含某一类的概率。
    在这里插入图片描述
    可视化YOLO输出的另一种方法是绘制其输出的边界框。这样做将产生如下可视化效果。每个单元格会输出5个锚框。总的来说,观察一次图像(一次前向传播),该模型需要预测:19x19x5=1805个锚框,不同的颜色代表不同的分类。
    在这里插入图片描述

分类阈值过滤

现在我们要为阈值进行过滤,我们要去掉一些预测值低于预设值的锚框。
模型共计会有19×19×5×85个数字,每一个锚框由85个数字组成(80个分类+ p c + p x + p y + p h + p w ),将维度为(19,19,5,85)或者(19,19,425)转换为下面的维度将会有利于我们的下一步操作:

  • box_confidence:tensor类型,维度为(19x19,5,1),包含19x19单元格中每个单元格预测的5个锚框中的所有的锚框的 p c(一些对象的置信概率)。
  • boxes:tensor类型,维度为(19x19,5,4),包含了所有的锚框的( p x , p y , p h , p w )
  • box_class_probs:tensor类型,维度为(19x19,5,80),包含了所有单元格中所有锚框的所有对象( c 1 , c 2 , c 3 , ⋅ ⋅ ⋅ , c 80 )检测的概率。
    -根据以下式子计算框的可能性
a = np.random.randn(19x19,5,1) #p_c
b = np.random.randn(19x19,5,80) #c_1 ~ c_80
c = a * b #计算后的维度将会是(19x19,5,80)
  • 对分类的预测的概率拥有最大值的锚框的索引,需要注意的是我们需要选择的轴,我们可以试着使用axis=-1。
  • 对应的最大值的锚框,需要注意的是我们需要选择的轴,我们可以试着使用axis=-1。
  • 根据阈值来创建掩码,比如执行下列操作:[0.9, 0.3, 0.4, 0.5, 0.1] < 0.4,返回的是[False, True, False, False, True],对于我们要保留的锚框,对应的掩码应该为True或者1.
  • 使用TensorFlow来对 box_class_scores、boxes、box_classes进行掩码操作以过滤出我们想要的锚框。
    下边是定义阈值过滤对象函数
def yolo_filter_boxes(box_confidence , boxes, box_class_probs, threshold = 0.6):"""通过阈值来过滤对象和分类的置信度。参数:box_confidence  - tensor类型,维度为(19,19,5,1),包含19x19单元格中每个单元格预测的5个锚框中的所有的锚框的pc (一些对象的置信概率)。boxes - tensor类型,维度为(19,19,5,4),包含了所有的锚框的(px,py,ph,pw )。box_class_probs - tensor类型,维度为(19,19,5,80),包含了所有单元格中所有锚框的所有对象( c1,c2,c3,···,c80 )检测的概率。threshold - 实数,阈值,如果分类预测的概率高于它,那么这个分类预测的概率就会被保留。返回:scores - tensor 类型,维度为(None,),包含了保留了的锚框的分类概率。boxes - tensor 类型,维度为(None,4),包含了保留了的锚框的(b_x, b_y, b_h, b_w)classess - tensor 类型,维度为(None,),包含了保留了的锚框的索引注意:"None"是因为你不知道所选框的确切数量,因为它取决于阈值。比如:如果有10个锚框,scores的实际输出大小将是(10,)"""#第一步:计算锚框的得分box_scores  = box_confidence * box_class_probs#第二步:找到最大值的锚框的索引以及对应的最大值的锚框的分数box_classes = K.argmax(box_scores, axis=-1)box_class_scores = K.max(box_scores, axis=-1)#第三步:根据阈值创建掩码filtering_mask = (box_class_scores >= threshold)#对scores, boxes 以及 classes使用掩码scores = tf.boolean_mask(box_class_scores,filtering_mask)boxes = tf.boolean_mask(boxes,filtering_mask)classes = tf.boolean_mask(box_classes,filtering_mask)return scores , boxes , classes

测试一下

with tf.Session() as test_a:box_confidence = tf.random_normal([19,19,5,1], mean=1, stddev=4, seed=1)boxes = tf.random_normal([19,19,5,4],  mean=1, stddev=4, seed=1)box_class_probs = tf.random_normal([19, 19, 5, 80], mean=1, stddev=4, seed = 1)scores, boxes, classes = yolo_filter_boxes(box_confidence, boxes, box_class_probs, threshold = 0.5)print("scores[2] = " + str(scores[2].eval()))print("boxes[2] = " + str(boxes[2].eval()))print("classes[2] = " + str(classes[2].eval()))print("scores.shape = " + str(scores.shape))print("boxes.shape = " + str(boxes.shape))print("classes.shape = " + str(classes.shape))test_a.close()

非最大值抑制

即使是我们通过阈值来过滤了一些得分较低的分类,但是我们依旧会有很多的锚框被留了下来,第二个过滤器就是让下图左边最终变为右边,我们叫它非最大值抑制( non-maximum suppression (NMS))
在这里插入图片描述
非最大值抑制使用了一个非常重要的功能,叫做交并比(Intersection over Union (IoU))
在这里插入图片描述

  • 在这里,我们要使用左上和右下来定义方框(x1,y1,x2,y2),而不是使用之前中点+宽高的方式定义。
  • 要计算矩形的面积,使用高度(y2-y1)乘以(x2-x1)。
  • 在这里插入图片描述
  • 为了计算相交的区域,我们需要确定相交的区域的宽、高均为正数,否则就为0,我们可以使用max(height, 0) 与 max(width, 0)来完成。
  • 在代码中,我们为了方便把图片的左上角定为(0,0),右上角为(1,0),左下角为(0,1),右下角为(1,1)。
    -定义交并比函数
def iou(box1, box2):"""实现两个锚框的交并比的计算参数:box1 - 第一个锚框,元组类型,(x1, y1, x2, y2)box2 - 第二个锚框,元组类型,(x1, y1, x2, y2)返回:iou - 实数,交并比。"""#计算相交的区域的面积xi1 = np.maximum(box1[0], box2[0])yi1 = np.maximum(box1[1], box2[1])xi2 = np.minimum(box1[2], box2[2])yi2 = np.minimum(box1[3], box2[3])inter_area = (xi1-xi2)*(yi1-yi2)#计算并集,公式为:Union(A,B) = A + B - Inter(A,B)box1_area = (box1[2]-box1[0])*(box1[3]-box1[1])box2_area = (box2[2]-box2[0])*(box2[3]-box2[1])union_area = box1_area + box2_area - inter_area#计算交并比iou = inter_area / union_areareturn iou

测试一下

box1 = (2,1,4,3)
box2 = (1,2,3,4)print("iou = " + str(iou(box1, box2)))

非最大值抑制函数

现在我们要实现非最大值抑制函数,关键步骤如下:

1.选择分值高的锚框
2.计算与其他框的重叠部分,并删除与iou_threshold相比重叠的框。
3.返回第一步,直到不再有比当前选中的框得分更低的框。
这将删除与选定框有较大重叠的其他所有锚框,只有得分最高的锚框仍然存在。
我们要实现的函数名为yolo_non_max_suppression(),使用TensorFlow实现,TensorFlow有两个内置函数用于实现非最大抑制(所以你实际上不需要使用你的iou()实现)
定义最大值抑制函数

def yolo_non_max_suppression(scores, boxes, classes, max_boxes=10, iou_threshold=0.5):"""为锚框实现非最大值抑制( Non-max suppression (NMS))参数:scores - tensor类型,维度为(None,),yolo_filter_boxes()的输出boxes - tensor类型,维度为(None,4),yolo_filter_boxes()的输出,已缩放到图像大小(见下文)classes - tensor类型,维度为(None,),yolo_filter_boxes()的输出max_boxes - 整数,预测的锚框数量的最大值iou_threshold - 实数,交并比阈值。返回:scores - tensor类型,维度为(,None),每个锚框的预测的可能值boxes - tensor类型,维度为(4,None),预测的锚框的坐标classes - tensor类型,维度为(,None),每个锚框的预测的分类注意:"None"是明显小于max_boxes的,这个函数也会改变scores、boxes、classes的维度,这会为下一步操作提供方便。"""max_boxes_tensor = K.variable(max_boxes,dtype="int32") #用于tf.image.non_max_suppression()K.get_session().run(tf.variables_initializer([max_boxes_tensor])) #初始化变量max_boxes_tensor#使用使用tf.image.non_max_suppression()来获取与我们保留的框相对应的索引列表nms_indices = tf.image.non_max_suppression(boxes, scores,max_boxes,iou_threshold)#使用K.gather()来选择保留的锚框scores = K.gather(scores, nms_indices)boxes = K.gather(boxes, nms_indices)classes = K.gather(classes, nms_indices)return scores, boxes, classes

测试一下

with tf.Session() as test_b:scores = tf.random_normal([54,], mean=1, stddev=4, seed = 1)boxes = tf.random_normal([54, 4], mean=1, stddev=4, seed = 1)classes = tf.random_normal([54,], mean=1, stddev=4, seed = 1)scores, boxes, classes = yolo_non_max_suppression(scores, boxes, classes)print("scores[2] = " + str(scores[2].eval()))print("boxes[2] = " + str(boxes[2].eval()))print("classes[2] = " + str(classes[2].eval()))print("scores.shape = " + str(scores.eval().shape))print("boxes.shape = " + str(boxes.eval().shape))print("classes.shape = " + str(classes.eval().shape))test_b.close()

对所有框进行过滤

现在我们要实现一个CNN(19x19x5x85)输出的函数,并使用刚刚实现的函数对所有框进行过滤。我们要实现的函数名为yolo_eval(),它采用YOLO编码的输出,并使用分数阈值和NMS来过滤这些框。

def yolo_eval(yolo_outputs, image_shape=(720.,1280.), max_boxes=10, score_threshold=0.6,iou_threshold=0.5):"""将YOLO编码的输出(很多锚框)转换为预测框以及它们的分数,框坐标和类。参数:yolo_outputs - 编码模型的输出(对于维度为(608,608,3)的图片),包含4个tensors类型的变量:box_confidence : tensor类型,维度为(None, 19, 19, 5, 1)box_xy         : tensor类型,维度为(None, 19, 19, 5, 2)box_wh         : tensor类型,维度为(None, 19, 19, 5, 2)box_class_probs: tensor类型,维度为(None, 19, 19, 5, 80)image_shape - tensor类型,维度为(2,),包含了输入的图像的维度,这里是(608.,608.)max_boxes - 整数,预测的锚框数量的最大值score_threshold - 实数,可能性阈值。iou_threshold - 实数,交并比阈值。返回:scores - tensor类型,维度为(,None),每个锚框的预测的可能值boxes - tensor类型,维度为(4,None),预测的锚框的坐标classes - tensor类型,维度为(,None),每个锚框的预测的分类"""#获取YOLO模型的输出box_confidence, box_xy, box_wh, box_class_probs = yolo_outputs#中心点转换为边角boxes = yolo_boxes_to_corners(box_xy,box_wh)#可信度分值过滤scores, boxes, classes = yolo_filter_boxes(box_confidence, boxes, box_class_probs, score_threshold)#缩放锚框,以适应原始图像boxes = yolo_utils.scale_boxes(boxes, image_shape)#使用非最大值抑制scores, boxes, classes = yolo_non_max_suppression(scores, boxes, classes, max_boxes, iou_threshold)return scores, boxes, classes

测试一下

with tf.Session() as test_c:yolo_outputs = (tf.random_normal([19, 19, 5, 1], mean=1, stddev=4, seed = 1),tf.random_normal([19, 19, 5, 2], mean=1, stddev=4, seed = 1),tf.random_normal([19, 19, 5, 2], mean=1, stddev=4, seed = 1),tf.random_normal([19, 19, 5, 80], mean=1, stddev=4, seed = 1))scores, boxes, classes = yolo_eval(yolo_outputs)print("scores[2] = " + str(scores[2].eval()))print("boxes[2] = " + str(boxes[2].eval()))print("classes[2] = " + str(classes[2].eval()))print("scores.shape = " + str(scores.eval().shape))print("boxes.shape = " + str(boxes.eval().shape))print("classes.shape = " + str(classes.eval().shape))test_c.close()

测试训练好的yolo模型

首先创建一个会话启动计算图

sess = K.get_session()

定义分类、锚框、图像维度

我们试着分类80个类别,使用5个锚框。我们收集了两个文件“coco_classes.txt”和“yolo_anchors.txt”中关于80个类和5个锚框的信息。 我们将这些数据加载到模型中。

class_names = yolo_utils.read_classes("model_data/coco_classes.txt")
anchors = yolo_utils.read_anchors("model_data/yolo_anchors.txt")
image_shape = (720.,1280.)

加载已经训练好的模型

训练YOLO模型需要很长时间,并且需要一个相当大的标签边界框数据集,用于大范围的目标类。我们将加载存储在“yolov2.h5”中的现有预训练Keras YOLO模型。 (这些权值来自官方YOLO网站,并使用Allan Zelener编写的函数进行转换,从技术上讲,这些参数来自“YOLOv2”模型。

yolo_model = load_model("model_data/yolov2.h5")

这会加载训练的YOLO模型的权重,。

yolo_model.summary()

模型的输出转换为边界框

yolo_model的输出是一个(m,19,19,5,85)的tensor变量,它需要进行处理和转换。

yolo_outputs = yolo_head(yolo_model.output, anchors, len(class_names))

过滤锚框

yolo_outputs已经正确的格式为我们提供了yolo_model的所有预测框,我们现在已准备好执行过滤并仅选择最佳的锚框。现在让我们调用之前实现的yolo_eval()

scores, boxes, classes = yolo_eval(yolo_outputs, image_shape)

实际图像中运行计算图

我们之前已经创建了一个用于会话的sess,这里有一些回顾:

yolo_model.input是yolo_model的输入,yolo_model.output是yolo_model的输出。
yolo_model.output会让yolo_head进行处理,这个函数最后输出yolo_outputs
yolo_outputs会让一个过滤函数yolo_eval进行处理,然后输出预测:scores、 boxes、 classes现在我们要实现predict()函数,使用它来对图像进行预测,我们需要运行TensorFlow的Session会话,然后在计算图上计算scores、 boxes、 classes,下面的代码可以帮你预处理图像:

`image, image_data = yolo_utils.preprocess_image("images/" + image_file, model_image_size = (608, 608))`
  • image:用于绘制框的图像的Python(PIL)表示,这里你不需要使用它。
  • image_data:图像的numpy数组,这将是CNN的输入。

定义预测函数

def predict(sess, image_file, is_show_info=True, is_plot=True):"""运行存储在sess的计算图以预测image_file的边界框,打印出预测的图与信息。参数:sess - 包含了YOLO计算图的TensorFlow/Keras的会话。image_file - 存储在images文件夹下的图片名称返回:out_scores - tensor类型,维度为(None,),锚框的预测的可能值。out_boxes - tensor类型,维度为(None,4),包含了锚框位置信息。out_classes - tensor类型,维度为(None,),锚框的预测的分类索引。 """#图像预处理image, image_data = yolo_utils.preprocess_image("images/" + image_file, model_image_size = (608, 608))#运行会话并在feed_dict中选择正确的占位符.out_scores, out_boxes, out_classes = sess.run([scores, boxes, classes], feed_dict = {yolo_model.input:image_data, K.learning_phase(): 0})#打印预测信息if is_show_info:print("在" + str(image_file) + "中找到了" + str(len(out_boxes)) + "个锚框。")#指定要绘制的边界框的颜色colors = yolo_utils.generate_colors(class_names)#在图中绘制边界框yolo_utils.draw_boxes(image, out_scores, out_boxes, out_classes, class_names, colors)#保存已经绘制了边界框的图image.save(os.path.join("out", image_file), quality=100)#打印出已经绘制了边界框的图if is_plot:output_image = scipy.misc.imread(os.path.join("out", image_file))plt.imshow(output_image)return out_scores, out_boxes, out_classes

实际预测一下

输入test.jpg图片进行预测

out_scores, out_boxes, out_classes = predict(sess, "test.jpg")

http://chatgpt.dhexx.cn/article/oHwnZnC4.shtml

相关文章

基于python的transform行人车辆识别

Transformer是一种神经网络体系结构&#xff0c;由于它能够有效地处理顺序数据中的长期依赖性&#xff0c;因此在自然语言处理(NLP)任务中受到欢迎。它还被应用于各种其他任务&#xff0c;包括图像分类、对象检测和语音识别。 在车辆和行人识别方面&#xff0c;transformer可用…

使用Python和docTR提取车辆识别号

VIN&#xff08;车辆识别号&#xff09;是一个17个字符的字符串&#xff0c;由数字和大写字母组成&#xff0c;用作汽车的指纹。 它可以帮助识别任何一辆汽车的寿命&#xff0c;并获得有关它的具体信息。该唯一标识符在制造过程中打印在车辆的某个位置&#xff0c;以便人们在租…

Opencv python之车辆识别项目(附代码)

文章目录 图片车辆识别视频车辆识别 图片车辆识别 根据文章搭建好环境后开始进行做项目link import sys import cv2 from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon, QPalette, QPixmap, QBrush, QRegExpValidatorclass mainWin(QW…

java opencv 之车辆识别

上篇写了人脸识别&#xff0c;因为人脸识别的训练模型 haarcascade_frontalface_alt.xml 之类的官方已经训练好了可以直接用&#xff0c;但是我们要识别车辆或者其它物体就得训练模型&#xff0c;好在废了一点力 找到了一位大神训练好的模型 核心代码 几乎和人脸识别的差不多 s…

如何开发一个车牌识别,车牌识别系统,车辆识别系统毕业设计毕设作品

开发准备 第1步&#xff1a;准备好百度智能云的账号 第2步&#xff1a;在百度智能云领取对应AI开发的免费资源包 第3步&#xff1a;创建对应的应用&#xff0c;然后获取对应的开发信息&#xff0c;主要是下面几个 AppID&#xff1a;应用列表中 API Key&#xff1a;应用列表…

车辆识别

一&#xff1a;简介 车牌识别系统(Vehicle License Plate Recognition&#xff0c;VLPR) 是指能够检测到受监控路面的车辆并自动提取车辆牌照信息&#xff08;含汉字字符、英文字母、阿拉伯数字及号牌颜色&#xff09;进行处理的技术。车牌识别是现代智能交通系统中的重要组成…

【OpenCV】 车辆识别 运动目标检测

目录 一&#xff1a;车辆识别 运动目标检测 二&#xff1a;车辆识别实现 超详细步骤解析 步骤一&#xff1a;灰度化处理 步骤二&#xff1a;帧差处理 步骤三&#xff1a;二值化处理 步骤四&#xff1a;图像降噪 4-1 腐蚀处理 目的 去除白色噪点 4-2 膨胀处理 目的 把白…

【OpenCV】车辆识别 C++ OpenCV 原理介绍 + 案例实现

目录 前言 一、图像处理 &#x1f4bb;二值化处理 &#x1f4bb;膨胀、腐蚀 &#x1f4bb;开运算、闭运算 二、案例实现 Step1&#xff1a;灰度处理 Step2&#xff1a;对视频进行帧差处理 Step3&#xff1a;二值化处理 Step4&#xff1a;腐蚀处理 Step5&#xff1a…

【OpenCV】车辆识别 目标检测 级联分类器 C++ 案例实现

目录 前言 一、目标检测技术 二、样本采集工作原理 三、创建自己的级联分类器 Step1&#xff1a;准备好样本图像 Step2&#xff1a;环境配置&#xff08;OpenCV win10&#xff09; Step3&#xff1a;设置路径 Step4&#xff1a;实现样本数据采集 Step5&#xff1a;实…

使用华为modelarts进行车辆识别

要求&#xff1a;从图像&#xff08;图3&#xff09;中检测并识别出车辆。车辆检测和识别算法可采用深度学习、BP网络或特征匹配等方法&#xff0c;方法不限。 图5-1待识别图像 原理&#xff1a;ModelArts是面向AI开发者的一站式开发平台&#xff0c;支持自动学习的功能&#…

车辆识别(特征提取+svm分类器)

以下为udacity的SDCND的一个项目 ps:这里使用的是用opencv进行特征提取+svm分类器的方法实现物体检测,是在深度学习流行前比较经典的实现方法 项目描述: 使用openCV提取图片特征,训练svm分类器,分类车辆与非车辆。用训练好的模型识别汽车前置摄像头记录视频中的车辆。 …

深度学习目标检测:YOLOv5实现车辆检测(含车辆检测数据集+训练代码)

深度学习目标检测&#xff1a;YOLOv5实现车辆检测(含车辆检测数据集训练代码) 目录 深度学习目标检测&#xff1a;YOLOv5实现车辆检测(含车辆检测数据集训练代码) 1. 前言 2. 车辆检测数据集说明 &#xff08;1&#xff09;车辆检测数据集 &#xff08;2&#xff09;自定…

案例-使用python实现基于opencv的车辆识别

写在开头&#xff0c;接触opencv也有很长一段时间了&#xff0c;中间还接触了halcon。但都是基于C实现&#xff0c;发现如果有什么idea&#xff0c;还是使用python可以快速实现。基于C版本的后期会有更新。 首先&#xff0c;这个案例是一个老生常谈的问题-车辆识别。首先我们要…

MySQL清空单表数据

一&#xff1a;问题背景 1. 问题描述 之前测试1千万数据插入MySQL数据库里面,分别使用单线程的方式和线程池的方式对比测试&#xff0c;查看效果,但是插入了1千万数据后,由于是测试数据,现在不能在新建一张表浪费存储空间,还是之前的表,要清空原来的数据.有哪些方式可用&#x…

mysql清空表数据_mysql数据库之如何清空表中数据

本篇文章主要讲述的是在数据库中使用清空命令&#xff0c;具有一定学习价值&#xff0c;有需要的朋友可以了解一下&#xff0c;希望能够对你有所帮助。 在做数据迁移&#xff0c;数据清洗或者写web项目时要将数据替换更新&#xff0c;那么有时要将表做清空处理 常用的清空数据表…

mysql删除表中所有数据_MySQL删除或清空表中数据的方法

原标题&#xff1a;MySQL删除或清空表中数据的方法 要想把MySQL中的数据删除或清空&#xff0c;可以通过两种方法来实现&#xff1a;DELETE语句和TRUNCATE TABLE语句。 DELETE语句可以将表中所有记录都删除&#xff0c;也可以指定WHERE子句&#xff0c;对要删除的记录进行选择;…

清空MySQL单库下所有表数据 || 删除MySQL单库下所有表

一、清空MySQL单库下所有表数据 -- 清空MySQL单库下所有表数据 SELECT CONCAT(truncate table ,TABLE_NAME,;) AS PLEASE_EXEC_ALL_SQL FROMinformation_schema.TABLES WHERETABLE_SCHEMA datagateway_std;如下图&#xff0c;然后复制所有查询结果&#xff0c;依次执行清表命…

Mysql如何清空数据库中所有的表数据

“db”是数据库名称 SELECT CONCAT(truncate table ,TABLE_NAME,;) AS a FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA db ; 全部复制出来运行即可 有外键约束的话&#xff0c;我们可以使用 SET FOREIGN_KEY_CHECKS0; 来禁用外键约束&#xff0c;执行完我们的语句之…

90个外国英文网站强力推荐!!!

2019独角兽企业重金招聘Python工程师标准>>> http://www.mtime.com/group/lazy/discussion/163374/ 转载于:https://my.oschina.net/crazyinsomnia/blog/2739

常用的英文文献网站

最常用的英文文献网站当然是&#xff1a;sci-hub。 除此之外&#xff0c;推荐几个比较常用的英文文献网站&#xff1a; Elsevier ScienceDirect 数据库试用&#xff1a; http://www.sciencedirect.com 科学引文索引数据库&#xff08;SCI&#xff09;学术资源&#xff1a; h…