User Management System

项目名称:用户管理系统
编程语言:PHP
配置:阿里云


阿里云配置

服务器配置

1. Apache
2. MySQL
3. PHP


功能简介

主要用于对用户信息的管理。整个系统还包括:第一,把接收到的位置信息转化为地图上的视图信息,用户可以在地图上查看自己的位置信息,并且显示周围的停车站点;第二,防盗管理,位置信息也可以用于防盗,管理后台把非正常开启,位置移动的车辆进行标记。最后通过电车停止的位置信息,判断电车是否被盗;第三,电量与骑行距离管理,管理后台可以根据当前的电量和当前的车速计算出用户可以的骑行距离,该距离是实时,会根据车速的变化而变化,保证准确性;第四,充电管理,用于管理电车电池充电,需要结合位置规划;第五,投放量管理,管理电车的投放量,防止很多城市出现过度投放的问题;第六,停车位置规划,停车场和充电桩必须合理规划,否者又会出现乱停乱放的问题。


系统体验

该地址只能进入首界面,后续界面由于只设计了管理员用户的,所以普通用户无法登陆,防止对数据和服务器造成破坏,如果想要查看,联系管理员

地址:www.learncv.cn/php

注意:最好用谷歌浏览器打开,其他浏览器可能出现图片加载不了的情况。


界面展示

登录界面
主界面
用户管理界面
文件管理界面
小游戏界面
卫星地图
接收来自GPS的定位图
运动路线图

本文总结于网络文章,加入了个人理解,仅用于个人学习研究,不得用于其他用途,如涉及版权问题,请联系邮箱513403849@qq.com

Plate Recognition

项目名称:车牌识别
编程语言:C++/Python

电脑配置:
name: GeForce GTX 1060 major: 6 minor: 1 memoryClockRate(GHz): 1.6705
pciBusID: 0000:01:00.0
totalMemory: 5.94GiB freeMemory: 5.86GiB


Introduction:

        该项目是本人申请的研究生创新项目中的一部分,上接行人和车辆检测,当物体检测模型检测出行人和车辆以后,会把检测到的物体切割出来,然后把这些物体中的车辆图片输送到车牌识别模型中去,让系统模型去识别车牌,获取车辆的备案登记信息。


Framework:

HyperLPR 高性能开源中文车牌识别框架,  底层是用C/C++实现,支持多平台使用,这里只介绍linux系统上的使用。可以源码安装,也可以通过pip安装库文件,如下所示:

>> sudo pip install hyperlpr  (linux system)

这里还介绍一下另一个车牌识别框架EasyPR,该框架也是C/C++实现,支持多平台,该框架与HyperLPR最大的区别在于EasyPR的实现都是通过传统的图像处理方法实现的,就最后的字符识别使用了ANN,对于初学者使用有很大的知识积累和提高。


Demo:

# -*- coding:utf-8 -*-
"""
   the program only add nms to remove duplicate license plates on the original basis
   python:3.5
"""

import sys
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import hyperlpr as pr

# 當python版本爲2.7時,使用下面語句,解決編碼問題
# reload(sys)
# sys.setdefaultencoding('utf-8')


def _interval_overlap(interval_a, interval_b):
    x1, x2 = interval_a
    x3, x4 = interval_b

    if x3 < x1:
        if x4 < x1:
            return 0
        else:
            return min(x2, x4) - x1
    else:
        if x2 < x3:
            return 0
        else:
            return min(x2, x4) - x3


def bbox_iou(box1, box2):
    intersect_w = _interval_overlap([box1[0], box1[2]], [box2[0], box2[2]])
    intersect_h = _interval_overlap([box1[1], box1[3]], [box2[1], box2[3]])
    intersect = intersect_w * intersect_h

    w1, h1 = box1[2] - box1[0], box1[3] - box1[1]
    w2, h2 = box2[2] - box2[0], box2[3] - box2[1]
    union = w1 * h1 + w2 * h2 - intersect

    return float(intersect) / union


def nms(plate, thresh):
    plate = [idx for idx in sorted(plate, key=lambda x: x[1], reverse=True)]
    nums = len(plate)
    bbox = [pt[2] for pt in plate]

    for i in range(nums):
        for j in range(i + 1, nums):
            if bbox_iou(bbox[i], bbox[j]) >= thresh:
                plate.pop(j)

    return plate

if __name__=="__main__":
    image = cv2.imread("timg.jpg")
    plate = pr.HyperLPR_PlateRecogntion(image)
    nums = len(plate)

    if nums > 0:
        plate = nms(plate, 0.5)
        for i in range(len(plate)):
            p = plate[i][0]
            # p.decode('utf-8') # python2.7使用
            box = plate[i][2]
            cv2.rectangle(image, (box[0], box[1]), (box[2], box[3]), (0, 0, 255), 2)

            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
            image = Image.fromarray(image)
            draw = ImageDraw.Draw(image)
            # simsun.ttc字体包可以从wins系统C:\Windows\Fonts复制到该项目下面
            font = ImageFont.truetype("simsun.ttc", 30, encoding='utf-8')
            draw.text((box[0], box[1] - 33), p, (255, 255, 0), font=font)
            image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)

        cv2.imwrite("res.jpg", image)
    else:
        print("The code cannot detect plates in the picture !")

Test:

原始图片
预测结果

分析:大体上预测结果还行,但是最左面这辆车却没有预测出来,模型预测一般。


Question:

pycharm导模块,模块名下有横线,且鼠标放上面,显示import resolves to its containing file  问题。

Traceback (most recent call last):
File "/home/ubuntu/dir/projects/hyperlpr/hyperlpr1/hyperlpr.py", line 60, in <module>  
plate = pr.HyperLPR_PlateRecogntion(image)
AttributeError: module 'hyperlpr' has no attribute 'HyperLPR_PlateRecogntion'

解决办法:这个问题其实很简单,是因为当前程序目录下有与模块名相同的程序文件,或者自己当前程序文件的名就是该模块名。把这个程序文件名换了就行了。

注:这里有点浪了,把代码的文件名和庫的文件名搞重复了,修改代码里面文件名即可。


参考链接:

1. HyperLPR Codes
2. 问题
3. HyperLPR 使用
4. HyperLPR 代码解读
5. EasyPR Codes
6. EasyPR Blog

本文总结于网络文章,加入了个人理解,仅用于个人学习研究,不得用于其他用途,如涉及版权问题,请联系邮箱513403849@qq.com

Face Detection

项目名称:人脸检测
编程语言:Tensorflow/Python

电脑配置:
name: GeForce GTX 1060 major: 6 minor: 1 memoryClockRate(GHz): 1.6705
pciBusID: 0000:01:00.0
totalMemory: 5.94GiB freeMemory: 5.86GiB


Introduction:

        该项目是本人申请的研究生创新项目中的一部分,上接行人和车辆检测,当物体检测模型检测出行人和车辆以后,会把检测到的物体切割出来,然后把这些物体中的行人图片输送到人脸检测模型中去,让人脸检测模型去检测出人脸,如果有人脸识别功能的话,还可以实现人脸信息的识别。


Model:

PyramidBox Model

PyramidBox的优点

1.本文提出了一种基于 anchor 的环境辅助方法,即 PyramidAnchors,从而引入有监督的信息来为较小的、模糊的和部分遮挡的人脸学习环境特征。
2.我们设计了低层级特征金字塔网络 (LFPN) 来更好地融合环境特征和面部特征。同时,该方法可以在单步中较好地处理不同尺度的人脸。
3.我们提出了一种环境敏感的预测模型,该模型由混合网络结构和 max-in-out 层组成,从融合的特征中学习准确的定位和分类。
4.我们提出了一种关注尺度的 data-anchor-sampling 策略,改变训练样本的分布,重点关注较小的人脸。
5.在通用人脸检测基准 FDDB 和 WIDER FACE 上,我们达到了当前最佳水平。


Train:

模型训练使用的是WIDER FACE数据集,基础模型用的是VGG 16,训练时可以使用预训练的VGG 16模型,具体训练过程不在详细叙述,参考代码


Test:

原始图片
预测结果

上述bounding box的得分情况如下:

1. 0.997
2. 0.748
3. 0.769
4. 0.932
5. 0.989
6. 0.989
7. 0.915


使用切割图进行检测:

第三个预测结果并不好,因为是切割的图像,分辨率非常低,导致预测精度比较低,容易出现误判的情况,可以对比完整图像和切割图像的准确度。


Question:

1. E [tensorflow/stream_executor/cuda/cuda_driver.cc:466] failed call to cuInit: CUDA_ERROR_NO_DEVICE
I [tensorflow/stream_executor/cuda/cuda_diagnostics.cc:86] kernel driver does not appear to be running on this host (ubuntu-G2): /proc/driver/nvidia/version does not exist
执行nvidia-smi显示: NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
解决办法:这是linux kernel 4.4.0-116-generic的一个小bug,降级到linux kernel 4.4.0-112-generic,再重装一下driver(不用重装cuda)问题就解决了,参考安装


参考链接:

1. PyramidBox
2. Paper 翻译
3. Codes
4. FPN
5. SSH
6. S³FD
7. DataSets  提取码: 6crf

本文总结于网络文章,加入了个人理解,仅用于个人学习研究,不得用于其他用途,如涉及版权问题,请联系邮箱513403849@qq.com

Person And Car Detection

项目名称:行人和车辆检测
编程语言:Keras/Python

电脑配置:
name: GeForce GTX 1060 major: 6 minor: 1 memoryClockRate(GHz): 1.6705
pciBusID: 0000:01:00.0
totalMemory: 5.94GiB freeMemory: 5.86GiB


Introduction:

        该项目是本人申请的研究生创新项目中的一部分,主要原理就是在交通路口通过摄像头拍摄某些时刻的照片,然后把这些拍摄的照片通过深度模型进行检测,查找出拍摄照片中的所有行人和车辆,供后续的人脸检测和车牌识别系统使用。


Model:

注:下面图片是Darknet-53的网络结构,本文使用的是Res-101的结构,原理一样,只是Block的数量不一样而已。

Darknet-53

Res-101:

Res 101
模型训练

Train:

这里数据用的是PASCAL VOC2012数据集,由于该项目只需要检测行人和车辆,所以这里数据还需要筛选,只保留下面标签数据
1. person
2. bicycle
3. car
4. motorbike
5. bus
6. truck
具体训练不做太多介绍,参考代码


Test:

原始图片
检测结果

上述bounding box的得分情况如下:

1. person: 98.00898432731628%
2. person: 89.7001564502716%
3. person: 99.30801391601562%
4. person: 97.35298156738281%
5. person: 99.17157888412476%
6. person: 99.18015003204346%
7. motorbike: 81.28312230110168%
8. motorbike: 82.47367143630981%
9. person: 99.39936399459839%
10. car: 71.61051034927368%
11. car: 81.30868077278137%
12. car: 80.75195550918579%
13. person: 71.83517813682556%
14. car: 97.70704507827759%

部分切割图:


Question:

这里很多问题非常的奇葩,大多数情况都是环境配置引起的,如果在使用中出现问题,最好根据问题去重新配置环境。本人亲测在python 2.7台式机上没有一点问题就可以运行,而在python 3.5的笔记本上就遇到了下面的奇葩问题。

1. Exception ignored in: <bound method BaseSession.__del__ of <tensorflow.python.client.session.Session object at 0x7fecee6109b0>>
Traceback (most recent call last):
File “/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py”, line 686, in __del__
TypeError: ‘NoneType’ object is not callable
解决办法:这个问题不是大问题,就算不解决也可以使用,在代码中加入如下语句。 2. TypeError: slice indices must be integers or None or have an __index__ method
解决办法: 这个问题一般都是数组在进行切片时,下标不是int型类型导致的,根据错误位置,修改下标为int型即可。

参考链接:

1. Yolo v3
2. 官方网站
3. Yolo v1
4. Yolo v2
5. Yolo v1-v2 Codes
6. Yolo v3 Codes
7. Pascal VOC    提取码:iz2d
8. Yolo weights    提取码:ahs4
9. Yolo v1-v3总结
10. 标注工具

本文总结于网络文章,加入了个人理解,仅用于个人学习研究,不得用于其他用途,如涉及版权问题,请联系邮箱513403849@qq.com

图像配准定位


项目名称:智能笔                                                           

项目语言:C/C++


功能简介:

摄像头拍摄目标,从中截取一帧,通过Surf算法提取图片特征,提取完特征后与事先准备好的特征库进行比对;由于特征库比较大,因此需要一个有效的数据管理结构,这里使用的是KD树存储特征;提取出的特征与特征库匹配时为了保证效率使用BBF算法搜索特征树,然后通过ķ近邻进行匹配,但是由于特征太多,直接匹配正确率很低,这里可以通过方差来修正,但是方差浪费时间,可以通过另一种方法修正,这里涉及保密不做介绍。匹配完成后再次使用Ransac算法进行匹配点筛选错匹配点,同时获得一个基础矩阵,最后通过仿射变换把图片从模板中标记出来。


使用算法:

Algorithm Purpose
Surf/Sift特征提取
KdTree存储特征
Bbf数据查找
Knn特征匹配
Ransac特征筛选
Jacobi 计算矩阵特征值

程序流程:

程序执行过程

结果展示:

1.目标图像

左图是原图,右图是剪切图(摄像头图像)

2.源图像

源1 ,源2, 源3

效果图:

匹配定位效果图

本文总结于网络文章,加入了个人理解,仅用于个人学习研究,不得用于其他用途,如涉及版权问题,请联系邮箱513403849@qq.com

Brain Tumors

项目名称:脑肿瘤分割
编程语言:Keras/Python


Introduction:

Task 1: Segmentation of gliomas in pre-operative MRI scans.
       The participants are called to address this task by using the provided clinically-acquired training data to develop their method and produce segmentation labels of the different glioma sub-regions. The sub-regions considered for evaluation are: 1) the “enhancing tumor” (ET), 2) the “tumor core” (TC), and 3) the “whole tumor” (WT) [see figure below]. The ET is described by areas that show hyper-intensity in T1Gd when compared to T1, but also when compared to “healthy” white matter in T1Gd. The TC describes the bulk of the tumor, which is what is typically resected. The TC entails the ET, as well as the necrotic (fluid-filled) and the non-enhancing (solid) parts of the tumor. The appearance of the necrotic (NCR) and the non-enhancing (NET) tumor core is typically hypo-intense in T1-Gd when compared to T1. The WT describes the complete extent of the disease, as it entails the TC and the peritumoral edema (ED), which is typically depicted by hyper-intense signal in FLAIR.
       The labels in the provided data are: 1 for NCR & NET2 for ED4 for ET, and 0 for everything else.
       The participants are called to upload their segmentation labels into CBICA’s Image Processing Portal for evaluation.

Task 2: Prediction of patient overall survival (OS) from pre-operative scans.
       Once the participants produce their segmentation labels in the pre-operative scans, they will be called to use these labels in combination with the provided multimodal MRI data to extract imaging/radiomic features that they consider appropriate, and analyze them through machine learning algorithms, in an attempt to predict patient OS. The participants do not need to be limited to volumetric parameters, but can also consider intensity, morphologic, histogram-based, and textural features, as well as spatial information, and glioma diffusion properties extracted from glioma growth models.
       Note that participants are expected to provide predicted survival status only for subjects with resection status of GTR (i.e., Gross Total Resection).
      The participants are called to upload a .csv file with the subject ids and the predicted survival values into CBICA’s Image Processing Portal for evaluation.

Feel free to send any communication related to the BraTS challenge to brats2018@cbica.upenn.edu


Process:


Model:

paper:Multi-level Activation for Segmentation of Hierarchically-nested Classes on 3D-Unet


Tricks:

MethodsName
NormalizationBN / LN / IN / SN
DroupoutS dropout / dropblock / Targeted dropout
Reduce dim1*1 kernel
AugmentSTN / Deformable ConvNets
ContextSPP / ParseNet / PSP / HDC / ASPP / FPA
Updeconvolution / bilinear / DUC / GAU
Crfdense crf
Domainconnected domain
Early stopyes
Lossdice loss / jaccard loss / focal loss
Regularizationl1_l2 / W constraint
ActivationReLU / PreLU / LeakyReLU / ELU

结果:

配置:显卡Nvidia 1060, 图片使用112*112*112
训练:Epoch 175/500 loss: -0.7303 – jaccard: 0.6066 – val_loss: -0.6615 – val_jaccard: 0.5421
Scores:
1.WT:0.8886     
2.TC:0.8049     
3.ET:0.7772
learderboard 2019 :leardboard

Continue reading Brain Tumors