一、生成coco数据集中文标签

博文末尾支持二维码赞赏哦 _

make_labels_cn.py

# -*- coding: utf-8 -*-
# 制作中文label ,命名规则为cn_类索引_字体大小.pngimport os# 获取物体名list
# path是物体名list文件地址
# 返回值是一个列表,索引是物体id,值为该类物体的名字
def get_name_list(path):name_list = []f = open(path)for line in f:line = line.rstrip()name_list.append(line)# 类别名return name_list
# 中文字体 英文文件名标签
# 查看系统的中文字体 fc-list :lang=zh-cn  >>> /usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf
# 制作标签,s是字体大小
def make_labels(s):i = 0for word in l:os.system("convert -fill black -background white -bordercolor white -border 4  -font /usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf -pointsize %d label:\"%s\" \"cn_%d_%d.png\"" % (s, word, i, s / 12 - 1))i = i + 1
# 注意替换上述 /usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf 为自己系统的中文字体# 中文标签  coco
l1 = ["人","自行车","汽车","摩托车","飞机","公交车","火车","卡车","船","交通灯","消防栓","停止标志","停车计时器","长凳","鸟","猫","狗","马","羊","牛","大象","熊","斑马","长颈鹿","背包","雨伞","手提包","领带","手提箱","飞盘","滑雪","滑雪板","体育用球","风筝","棒球棒","棒球手套","滑板","冲浪板","网球拍","瓶子","红酒杯","杯子","叉子","小刀","勺子","碗","香蕉","苹果","三明治","橘子","西兰花","胡萝卜","热狗","披萨","甜甜圈","蛋糕","椅子","沙发","盆栽","床","餐桌","厕所","显示器","笔记本","鼠标","遥控器","键盘","手机","微波炉","烤箱","吐司机","水槽","冰箱","书","闹钟","花瓶","剪刀","玩具熊","吹风机","牙刷"]
l=["人","自行车","车","摩托车","飞机","大巴","火车","卡车","船","交通灯","消防栓","停止标识","停车计时器","长凳","鸟","猫","狗","马","羊","牛","大象","熊","斑马","长颈鹿","背包","伞","手提包","领带","手提箱","飞盘","雪橇","滑雪板","体育用球","风筝","棒球棒","棒球手套","滑板","冲浪板","网球拍","瓶子","红酒杯","杯子","叉子","小刀","勺子","碗","香蕉","苹果","三明治","橘子","西兰花","萝卜","热狗","披萨","甜甜圈","蛋糕","椅子","沙发","盆栽","床","餐桌","厕所","显示器","笔记本","鼠标","遥控","键盘","手机","微波炉","烤箱","吐司机","水槽","冰箱","书","闹钟","花瓶","剪刀","泰迪熊","吹风机","牙刷"]# 英文 标签  coco
l2 = ["person","bicycle","car","motorbike","aeroplane","bus","train","truck","boat","traffic light","fire hydrant","stop sign","parking meter","bench","bird","cat","dog","horse","sheep","cow","elephant","bear","zebra","giraffe","backpack","umbrella","handbag","tie","suitcase","frisbee","skis","snowboard","sports ball","kite","baseball bat","baseball glove","skateboard","surfboard","tennis racket","bottle","wine glass","cup","fork","knife","spoon","bowl","banana","apple","sandwich","orange","broccoli","carrot","hot dog","pizza","donut","cake","chair","sofa","pottedplant","bed","diningtable","toilet","tvmonitor","laptop","mouse","remote","keyboard","cell phone","microwave","oven","toaster","sink","refrigerator","book","clock","vase","scissors","teddy bear","hair drier","toothbrush"]
#l = get_name_list("/raid/pengchong_data/Tools/Paul_YOLO/data/paul_cn.names")for i in [12, 24, 36, 48, 60, 72, 84, 96]:# 对于不同大小边框的物体有不同大小的标签make_labels(i)

在 label目录下 执行  python make_labels_cn.py

二、修改darknet image.c文件 使得系统可以输出 中文标签

// 添加中文显示
#include "image.h"
#include "utils.h"
#include "blas.h"
#include "cuda.h"
#include <stdio.h>
#include <math.h>#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"// 添加/
#ifdef OPENCV
#define CHINESE//中文字体
#endif
//
int windows = 0;float colors[6][3] = { {1,0,1}, {0,0,1},{0,1,1},{0,1,0},{1,1,0},{1,0,0} };float get_color(int c, int x, int max)
{float ratio = ((float)x/max)*5;int i = floor(ratio);int j = ceil(ratio);ratio -= i;float r = (1-ratio) * colors[i][c] + ratio*colors[j][c];//printf("%f\n", r);return r;
}image mask_to_rgb(image mask)
{int n = mask.c;image im = make_image(mask.w, mask.h, 3);int i, j;for(j = 0; j < n; ++j){int offset = j*123457 % n;float red = get_color(2,offset,n);float green = get_color(1,offset,n);float blue = get_color(0,offset,n);for(i = 0; i < im.w*im.h; ++i){im.data[i + 0*im.w*im.h] += mask.data[j*im.h*im.w + i]*red;im.data[i + 1*im.w*im.h] += mask.data[j*im.h*im.w + i]*green;im.data[i + 2*im.w*im.h] += mask.data[j*im.h*im.w + i]*blue;}}return im;
}static float get_pixel(image m, int x, int y, int c)
{assert(x < m.w && y < m.h && c < m.c);return m.data[c*m.h*m.w + y*m.w + x];
}
static float get_pixel_extend(image m, int x, int y, int c)
{if(x < 0 || x >= m.w || y < 0 || y >= m.h) return 0;/*if(x < 0) x = 0;if(x >= m.w) x = m.w-1;if(y < 0) y = 0;if(y >= m.h) y = m.h-1;*/if(c < 0 || c >= m.c) return 0;return get_pixel(m, x, y, c);
}
static void set_pixel(image m, int x, int y, int c, float val)
{if (x < 0 || y < 0 || c < 0 || x >= m.w || y >= m.h || c >= m.c) return;assert(x < m.w && y < m.h && c < m.c);m.data[c*m.h*m.w + y*m.w + x] = val;
}
static void add_pixel(image m, int x, int y, int c, float val)
{assert(x < m.w && y < m.h && c < m.c);m.data[c*m.h*m.w + y*m.w + x] += val;
}static float bilinear_interpolate(image im, float x, float y, int c)
{int ix = (int) floorf(x);int iy = (int) floorf(y);float dx = x - ix;float dy = y - iy;float val = (1-dy) * (1-dx) * get_pixel_extend(im, ix, iy, c) + dy     * (1-dx) * get_pixel_extend(im, ix, iy+1, c) + (1-dy) *   dx   * get_pixel_extend(im, ix+1, iy, c) +dy     *   dx   * get_pixel_extend(im, ix+1, iy+1, c);return val;
}void composite_image(image source, image dest, int dx, int dy)
{int x,y,k;for(k = 0; k < source.c; ++k){for(y = 0; y < source.h; ++y){for(x = 0; x < source.w; ++x){float val = get_pixel(source, x, y, k);float val2 = get_pixel_extend(dest, dx+x, dy+y, k);set_pixel(dest, dx+x, dy+y, k, val * val2);}}}
}image border_image(image a, int border)
{image b = make_image(a.w + 2*border, a.h + 2*border, a.c);int x,y,k;for(k = 0; k < b.c; ++k){for(y = 0; y < b.h; ++y){for(x = 0; x < b.w; ++x){float val = get_pixel_extend(a, x - border, y - border, k);if(x - border < 0 || x - border >= a.w || y - border < 0 || y - border >= a.h) val = 1;set_pixel(b, x, y, k, val);}}}return b;
}image tile_images(image a, image b, int dx)
{if(a.w == 0) return copy_image(b);image c = make_image(a.w + b.w + dx, (a.h > b.h) ? a.h : b.h, (a.c > b.c) ? a.c : b.c);fill_cpu(c.w*c.h*c.c, 1, c.data, 1);embed_image(a, c, 0, 0); composite_image(b, c, a.w + dx, 0);return c;
}image get_label(image **characters, char *string, int size)
{size = size/10;if(size > 7) size = 7;image label = make_empty_image(0,0,0);while(*string){image l = characters[size][(int)*string];image n = tile_images(label, l, -size - 1 + (size+1)/2);free_image(label);label = n;++string;}image b = border_image(label, label.h*.25);free_image(label);return b;
}
// ==========添加=========================
#ifdef CHINESE
// 图片名       类id   图片大小
image get_label_cn(image **characters, int class, int size)
{size = size/10;if(size > 7) size = 7;image label = make_empty_image(0,0,0);//while(*string){image l = characters[size][class];image n = tile_images(label, l, -size - 1 + (size+1)/2);free_image(label);label = n;//   ++string;//}image b = border_image(label, label.h*.25);free_image(label);return b;
}
#endifvoid draw_label(image a, int r, int c, image label, const float *rgb)
{int w = label.w;int h = label.h;if (r - h >= 0) r = r - h;int i, j, k;for(j = 0; j < h && j + r < a.h; ++j){for(i = 0; i < w && i + c < a.w; ++i){for(k = 0; k < label.c; ++k){float val = get_pixel(label, i, j, k);set_pixel(a, i+c, j+r, k, rgb[k] * val);}}}
}void draw_box(image a, int x1, int y1, int x2, int y2, float r, float g, float b)
{//normalize_image(a);int i;if(x1 < 0) x1 = 0;if(x1 >= a.w) x1 = a.w-1;if(x2 < 0) x2 = 0;if(x2 >= a.w) x2 = a.w-1;if(y1 < 0) y1 = 0;if(y1 >= a.h) y1 = a.h-1;if(y2 < 0) y2 = 0;if(y2 >= a.h) y2 = a.h-1;for(i = x1; i <= x2; ++i){a.data[i + y1*a.w + 0*a.w*a.h] = r;a.data[i + y2*a.w + 0*a.w*a.h] = r;a.data[i + y1*a.w + 1*a.w*a.h] = g;a.data[i + y2*a.w + 1*a.w*a.h] = g;a.data[i + y1*a.w + 2*a.w*a.h] = b;a.data[i + y2*a.w + 2*a.w*a.h] = b;}for(i = y1; i <= y2; ++i){a.data[x1 + i*a.w + 0*a.w*a.h] = r;a.data[x2 + i*a.w + 0*a.w*a.h] = r;a.data[x1 + i*a.w + 1*a.w*a.h] = g;a.data[x2 + i*a.w + 1*a.w*a.h] = g;a.data[x1 + i*a.w + 2*a.w*a.h] = b;a.data[x2 + i*a.w + 2*a.w*a.h] = b;}
}void draw_box_width(image a, int x1, int y1, int x2, int y2, int w, float r, float g, float b)
{int i;for(i = 0; i < w; ++i){draw_box(a, x1+i, y1+i, x2-i, y2-i, r, g, b);}
}void draw_bbox(image a, box bbox, int w, float r, float g, float b)
{int left  = (bbox.x-bbox.w/2)*a.w;int right = (bbox.x+bbox.w/2)*a.w;int top   = (bbox.y-bbox.h/2)*a.h;int bot   = (bbox.y+bbox.h/2)*a.h;int i;for(i = 0; i < w; ++i){draw_box(a, left+i, top+i, right-i, bot-i, r, g, b);}
}// ======================= 改 ==========
image **load_alphabet()
{int i, j;const int nsize = 8;image **alphabets = calloc(nsize, sizeof(image));for(j = 0; j < nsize; ++j){alphabets[j] = calloc(128, sizeof(image));
/#ifdef CHINESEfor(i = 0; i < 80; i++){char buff[256];sprintf(buff, "data/labels/cn_%d_%d.png", i, j);alphabets[j][i] = load_image_color(buff, 0, 0);}#else      for(i = 32; i < 127; ++i){char buff[256];sprintf(buff, "data/labels/%d_%d.png", i, j);alphabets[j][i] = load_image_color(buff, 0, 0);}#endif
//}return alphabets;
}========== 改 ========/
void draw_detections(image im, detection *dets, int num, float thresh, char **names, image **alphabet, int classes)
{int i,j;for(i = 0; i < num; ++i){char labelstr[4096] = {0};int class = -1;for(j = 0; j < classes; ++j){if (dets[i].prob[j] > thresh){if (class < 0) {strcat(labelstr, names[j]);class = j;} else {strcat(labelstr, ", ");strcat(labelstr, names[j]);}printf("%s: %.0f%%\n", names[j], dets[i].prob[j]*100);}}if(class >= 0){int width = im.h * .006;/*if(0){width = pow(prob, 1./2.)*10+1;alphabet = 0;}*///printf("%d %s: %.0f%%\n", i, names[class], prob*100);int offset = class*123457 % classes;float red = get_color(2,offset,classes);float green = get_color(1,offset,classes);float blue = get_color(0,offset,classes);float rgb[3];//width = prob*20+2;rgb[0] = red;rgb[1] = green;rgb[2] = blue;box b = dets[i].bbox;//printf("%f %f %f %f\n", b.x, b.y, b.w, b.h);int left  = (b.x-b.w/2.)*im.w;int right = (b.x+b.w/2.)*im.w;int top   = (b.y-b.h/2.)*im.h;int bot   = (b.y+b.h/2.)*im.h;if(left < 0) left = 0;if(right > im.w-1) right = im.w-1;if(top < 0) top = 0;if(bot > im.h-1) bot = im.h-1;
/// 改 /draw_box_width(im, left, top, right, bot, width, red, green, blue);if (alphabet) {//image label = get_label(alphabet, labelstr, (im.h*.03));#ifdef CHINESEimage label = get_label_cn(alphabet, class, (im.h*.03));#elseimage label = get_label(alphabet, names[class], (im.h*.03));#endifdraw_label(im, top + width, left, label, rgb);free_image(label);}
/if (dets[i].mask){image mask = float_to_image(14, 14, 1, dets[i].mask);image resized_mask = resize_image(mask, b.w*im.w, b.h*im.h);image tmask = threshold_image(resized_mask, .5);embed_image(tmask, im, left, top);free_image(mask);free_image(resized_mask);free_image(tmask);}}}
}void transpose_image(image im)
{assert(im.w == im.h);int n, m;int c;for(c = 0; c < im.c; ++c){for(n = 0; n < im.w-1; ++n){for(m = n + 1; m < im.w; ++m){float swap = im.data[m + im.w*(n + im.h*c)];im.data[m + im.w*(n + im.h*c)] = im.data[n + im.w*(m + im.h*c)];im.data[n + im.w*(m + im.h*c)] = swap;}}}
}void rotate_image_cw(image im, int times)
{assert(im.w == im.h);times = (times + 400) % 4;int i, x, y, c;int n = im.w;for(i = 0; i < times; ++i){for(c = 0; c < im.c; ++c){for(x = 0; x < n/2; ++x){for(y = 0; y < (n-1)/2 + 1; ++y){float temp = im.data[y + im.w*(x + im.h*c)];im.data[y + im.w*(x + im.h*c)] = im.data[n-1-x + im.w*(y + im.h*c)];im.data[n-1-x + im.w*(y + im.h*c)] = im.data[n-1-y + im.w*(n-1-x + im.h*c)];im.data[n-1-y + im.w*(n-1-x + im.h*c)] = im.data[x + im.w*(n-1-y + im.h*c)];im.data[x + im.w*(n-1-y + im.h*c)] = temp;}}}}
}void flip_image(image a)
{int i,j,k;for(k = 0; k < a.c; ++k){for(i = 0; i < a.h; ++i){for(j = 0; j < a.w/2; ++j){int index = j + a.w*(i + a.h*(k));int flip = (a.w - j - 1) + a.w*(i + a.h*(k));float swap = a.data[flip];a.data[flip] = a.data[index];a.data[index] = swap;}}}
}image image_distance(image a, image b)
{int i,j;image dist = make_image(a.w, a.h, 1);for(i = 0; i < a.c; ++i){for(j = 0; j < a.h*a.w; ++j){dist.data[j] += pow(a.data[i*a.h*a.w+j]-b.data[i*a.h*a.w+j],2);}}for(j = 0; j < a.h*a.w; ++j){dist.data[j] = sqrt(dist.data[j]);}return dist;
}void ghost_image(image source, image dest, int dx, int dy)
{int x,y,k;float max_dist = sqrt((-source.w/2. + .5)*(-source.w/2. + .5));for(k = 0; k < source.c; ++k){for(y = 0; y < source.h; ++y){for(x = 0; x < source.w; ++x){float dist = sqrt((x - source.w/2. + .5)*(x - source.w/2. + .5) + (y - source.h/2. + .5)*(y - source.h/2. + .5));float alpha = (1 - dist/max_dist);if(alpha < 0) alpha = 0;float v1 = get_pixel(source, x,y,k);float v2 = get_pixel(dest, dx+x,dy+y,k);float val = alpha*v1 + (1-alpha)*v2;set_pixel(dest, dx+x, dy+y, k, val);}}}
}void blocky_image(image im, int s)
{int i,j,k;for(k = 0; k < im.c; ++k){for(j = 0; j < im.h; ++j){for(i = 0; i < im.w; ++i){im.data[i + im.w*(j + im.h*k)] = im.data[i/s*s + im.w*(j/s*s + im.h*k)];}}}
}void censor_image(image im, int dx, int dy, int w, int h)
{int i,j,k;int s = 32;if(dx < 0) dx = 0;if(dy < 0) dy = 0;for(k = 0; k < im.c; ++k){for(j = dy; j < dy + h && j < im.h; ++j){for(i = dx; i < dx + w && i < im.w; ++i){im.data[i + im.w*(j + im.h*k)] = im.data[i/s*s + im.w*(j/s*s + im.h*k)];//im.data[i + j*im.w + k*im.w*im.h] = 0;}}}
}void embed_image(image source, image dest, int dx, int dy)
{int x,y,k;for(k = 0; k < source.c; ++k){for(y = 0; y < source.h; ++y){for(x = 0; x < source.w; ++x){float val = get_pixel(source, x,y,k);set_pixel(dest, dx+x, dy+y, k, val);}}}
}image collapse_image_layers(image source, int border)
{int h = source.h;h = (h+border)*source.c - border;image dest = make_image(source.w, h, 1);int i;for(i = 0; i < source.c; ++i){image layer = get_image_layer(source, i);int h_offset = i*(source.h+border);embed_image(layer, dest, 0, h_offset);free_image(layer);}return dest;
}void constrain_image(image im)
{int i;for(i = 0; i < im.w*im.h*im.c; ++i){if(im.data[i] < 0) im.data[i] = 0;if(im.data[i] > 1) im.data[i] = 1;}
}void normalize_image(image p)
{int i;float min = 9999999;float max = -999999;for(i = 0; i < p.h*p.w*p.c; ++i){float v = p.data[i];if(v < min) min = v;if(v > max) max = v;}if(max - min < .000000001){min = 0;max = 1;}for(i = 0; i < p.c*p.w*p.h; ++i){p.data[i] = (p.data[i] - min)/(max-min);}
}void normalize_image2(image p)
{float *min = calloc(p.c, sizeof(float));float *max = calloc(p.c, sizeof(float));int i,j;for(i = 0; i < p.c; ++i) min[i] = max[i] = p.data[i*p.h*p.w];for(j = 0; j < p.c; ++j){for(i = 0; i < p.h*p.w; ++i){float v = p.data[i+j*p.h*p.w];if(v < min[j]) min[j] = v;if(v > max[j]) max[j] = v;}}for(i = 0; i < p.c; ++i){if(max[i] - min[i] < .000000001){min[i] = 0;max[i] = 1;}}for(j = 0; j < p.c; ++j){for(i = 0; i < p.w*p.h; ++i){p.data[i+j*p.h*p.w] = (p.data[i+j*p.h*p.w] - min[j])/(max[j]-min[j]);}}free(min);free(max);
}void copy_image_into(image src, image dest)
{memcpy(dest.data, src.data, src.h*src.w*src.c*sizeof(float));
}image copy_image(image p)
{image copy = p;copy.data = calloc(p.h*p.w*p.c, sizeof(float));memcpy(copy.data, p.data, p.h*p.w*p.c*sizeof(float));return copy;
}void rgbgr_image(image im)
{int i;for(i = 0; i < im.w*im.h; ++i){float swap = im.data[i];im.data[i] = im.data[i+im.w*im.h*2];im.data[i+im.w*im.h*2] = swap;}
}#ifdef OPENCV
void show_image_cv(image p, const char *name, IplImage *disp)
{int x,y,k;if(p.c == 3) rgbgr_image(p);//normalize_image(copy);char buff[256];//sprintf(buff, "%s (%d)", name, windows);sprintf(buff, "%s", name);int step = disp->widthStep;cvNamedWindow(buff, CV_WINDOW_NORMAL); //cvMoveWindow(buff, 100*(windows%10) + 200*(windows/10), 100*(windows%10));++windows;for(y = 0; y < p.h; ++y){for(x = 0; x < p.w; ++x){for(k= 0; k < p.c; ++k){disp->imageData[y*step + x*p.c + k] = (unsigned char)(get_pixel(p,x,y,k)*255);}}}if(0){int w = 448;int h = w*p.h/p.w;if(h > 1000){h = 1000;w = h*p.w/p.h;}IplImage *buffer = disp;disp = cvCreateImage(cvSize(w, h), buffer->depth, buffer->nChannels);cvResize(buffer, disp, CV_INTER_LINEAR);cvReleaseImage(&buffer);}cvShowImage(buff, disp);
}
#endifvoid show_image(image p, const char *name)
{
#ifdef OPENCVIplImage *disp = cvCreateImage(cvSize(p.w,p.h), IPL_DEPTH_8U, p.c);image copy = copy_image(p);constrain_image(copy);show_image_cv(copy, name, disp);free_image(copy);cvReleaseImage(&disp);
#elsefprintf(stderr, "Not compiled with OpenCV, saving to %s.png instead\n", name);save_image(p, name);
#endif
}#ifdef OPENCVvoid ipl_into_image(IplImage* src, image im)
{unsigned char *data = (unsigned char *)src->imageData;int h = src->height;int w = src->width;int c = src->nChannels;int step = src->widthStep;int i, j, k;for(i = 0; i < h; ++i){for(k= 0; k < c; ++k){for(j = 0; j < w; ++j){im.data[k*w*h + i*w + j] = data[i*step + j*c + k]/255.;}}}
}image ipl_to_image(IplImage* src)
{int h = src->height;int w = src->width;int c = src->nChannels;image out = make_image(w, h, c);ipl_into_image(src, out);return out;
}image load_image_cv(char *filename, int channels)
{IplImage* src = 0;int flag = -1;if (channels == 0) flag = -1;else if (channels == 1) flag = 0;else if (channels == 3) flag = 1;else {fprintf(stderr, "OpenCV can't force load with %d channels\n", channels);}if( (src = cvLoadImage(filename, flag)) == 0 ){fprintf(stderr, "Cannot load image \"%s\"\n", filename);char buff[256];sprintf(buff, "echo %s >> bad.list", filename);system(buff);return make_image(10,10,3);//exit(0);}image out = ipl_to_image(src);cvReleaseImage(&src);rgbgr_image(out);return out;
}void flush_stream_buffer(CvCapture *cap, int n)
{int i;for(i = 0; i < n; ++i) {cvQueryFrame(cap);}
}image get_image_from_stream(CvCapture *cap)
{IplImage* src = cvQueryFrame(cap);if (!src) return make_empty_image(0,0,0);image im = ipl_to_image(src);rgbgr_image(im);return im;
}int fill_image_from_stream(CvCapture *cap, image im)
{IplImage* src = cvQueryFrame(cap);if (!src) return 0;ipl_into_image(src, im);rgbgr_image(im);return 1;
}void save_image_jpg(image p, const char *name)
{image copy = copy_image(p);if(p.c == 3) rgbgr_image(copy);int x,y,k;char buff[256];sprintf(buff, "%s.jpg", name);IplImage *disp = cvCreateImage(cvSize(p.w,p.h), IPL_DEPTH_8U, p.c);int step = disp->widthStep;for(y = 0; y < p.h; ++y){for(x = 0; x < p.w; ++x){for(k= 0; k < p.c; ++k){disp->imageData[y*step + x*p.c + k] = (unsigned char)(get_pixel(copy,x,y,k)*255);}}}cvSaveImage(buff, disp,0);cvReleaseImage(&disp);free_image(copy);
}
#endifvoid save_image_png(image im, const char *name)
{char buff[256];//sprintf(buff, "%s (%d)", name, windows);sprintf(buff, "%s.png", name);unsigned char *data = calloc(im.w*im.h*im.c, sizeof(char));int i,k;for(k = 0; k < im.c; ++k){for(i = 0; i < im.w*im.h; ++i){data[i*im.c+k] = (unsigned char) (255*im.data[i + k*im.w*im.h]);}}int success = stbi_write_png(buff, im.w, im.h, im.c, data, im.w*im.c);free(data);if(!success) fprintf(stderr, "Failed to write image %s\n", buff);
}void save_image(image im, const char *name)
{
#ifdef OPENCVsave_image_jpg(im, name);
#elsesave_image_png(im, name);
#endif
}void show_image_layers(image p, char *name)
{int i;char buff[256];for(i = 0; i < p.c; ++i){sprintf(buff, "%s - Layer %d", name, i);image layer = get_image_layer(p, i);show_image(layer, buff);free_image(layer);}
}void show_image_collapsed(image p, char *name)
{image c = collapse_image_layers(p, 1);show_image(c, name);free_image(c);
}image make_empty_image(int w, int h, int c)
{image out;out.data = 0;out.h = h;out.w = w;out.c = c;return out;
}image make_image(int w, int h, int c)
{image out = make_empty_image(w,h,c);out.data = calloc(h*w*c, sizeof(float));return out;
}image make_random_image(int w, int h, int c)
{image out = make_empty_image(w,h,c);out.data = calloc(h*w*c, sizeof(float));int i;for(i = 0; i < w*h*c; ++i){out.data[i] = (rand_normal() * .25) + .5;}return out;
}image float_to_image(int w, int h, int c, float *data)
{image out = make_empty_image(w,h,c);out.data = data;return out;
}void place_image(image im, int w, int h, int dx, int dy, image canvas)
{int x, y, c;for(c = 0; c < im.c; ++c){for(y = 0; y < h; ++y){for(x = 0; x < w; ++x){float rx = ((float)x / w) * im.w;float ry = ((float)y / h) * im.h;float val = bilinear_interpolate(im, rx, ry, c);set_pixel(canvas, x + dx, y + dy, c, val);}}}
}image center_crop_image(image im, int w, int h)
{int m = (im.w < im.h) ? im.w : im.h;   image c = crop_image(im, (im.w - m) / 2, (im.h - m)/2, m, m);image r = resize_image(c, w, h);free_image(c);return r;
}image rotate_crop_image(image im, float rad, float s, int w, int h, float dx, float dy, float aspect)
{int x, y, c;float cx = im.w/2.;float cy = im.h/2.;image rot = make_image(w, h, im.c);for(c = 0; c < im.c; ++c){for(y = 0; y < h; ++y){for(x = 0; x < w; ++x){float rx = cos(rad)*((x - w/2.)/s*aspect + dx/s*aspect) - sin(rad)*((y - h/2.)/s + dy/s) + cx;float ry = sin(rad)*((x - w/2.)/s*aspect + dx/s*aspect) + cos(rad)*((y - h/2.)/s + dy/s) + cy;float val = bilinear_interpolate(im, rx, ry, c);set_pixel(rot, x, y, c, val);}}}return rot;
}image rotate_image(image im, float rad)
{int x, y, c;float cx = im.w/2.;float cy = im.h/2.;image rot = make_image(im.w, im.h, im.c);for(c = 0; c < im.c; ++c){for(y = 0; y < im.h; ++y){for(x = 0; x < im.w; ++x){float rx = cos(rad)*(x-cx) - sin(rad)*(y-cy) + cx;float ry = sin(rad)*(x-cx) + cos(rad)*(y-cy) + cy;float val = bilinear_interpolate(im, rx, ry, c);set_pixel(rot, x, y, c, val);}}}return rot;
}void fill_image(image m, float s)
{int i;for(i = 0; i < m.h*m.w*m.c; ++i) m.data[i] = s;
}void translate_image(image m, float s)
{int i;for(i = 0; i < m.h*m.w*m.c; ++i) m.data[i] += s;
}void scale_image(image m, float s)
{int i;for(i = 0; i < m.h*m.w*m.c; ++i) m.data[i] *= s;
}image crop_image(image im, int dx, int dy, int w, int h)
{image cropped = make_image(w, h, im.c);int i, j, k;for(k = 0; k < im.c; ++k){for(j = 0; j < h; ++j){for(i = 0; i < w; ++i){int r = j + dy;int c = i + dx;float val = 0;r = constrain_int(r, 0, im.h-1);c = constrain_int(c, 0, im.w-1);val = get_pixel(im, c, r, k);set_pixel(cropped, i, j, k, val);}}}return cropped;
}int best_3d_shift_r(image a, image b, int min, int max)
{if(min == max) return min;int mid = floor((min + max) / 2.);image c1 = crop_image(b, 0, mid, b.w, b.h);image c2 = crop_image(b, 0, mid+1, b.w, b.h);float d1 = dist_array(c1.data, a.data, a.w*a.h*a.c, 10);float d2 = dist_array(c2.data, a.data, a.w*a.h*a.c, 10);free_image(c1);free_image(c2);if(d1 < d2) return best_3d_shift_r(a, b, min, mid);else return best_3d_shift_r(a, b, mid+1, max);
}int best_3d_shift(image a, image b, int min, int max)
{int i;int best = 0;float best_distance = FLT_MAX;for(i = min; i <= max; i += 2){image c = crop_image(b, 0, i, b.w, b.h);float d = dist_array(c.data, a.data, a.w*a.h*a.c, 100);if(d < best_distance){best_distance = d;best = i;}printf("%d %f\n", i, d);free_image(c);}return best;
}void composite_3d(char *f1, char *f2, char *out, int delta)
{if(!out) out = "out";image a = load_image(f1, 0,0,0);image b = load_image(f2, 0,0,0);int shift = best_3d_shift_r(a, b, -a.h/100, a.h/100);image c1 = crop_image(b, 10, shift, b.w, b.h);float d1 = dist_array(c1.data, a.data, a.w*a.h*a.c, 100);image c2 = crop_image(b, -10, shift, b.w, b.h);float d2 = dist_array(c2.data, a.data, a.w*a.h*a.c, 100);if(d2 < d1 && 0){image swap = a;a = b;b = swap;shift = -shift;printf("swapped, %d\n", shift);}else{printf("%d\n", shift);}image c = crop_image(b, delta, shift, a.w, a.h);int i;for(i = 0; i < c.w*c.h; ++i){c.data[i] = a.data[i];}
#ifdef OPENCVsave_image_jpg(c, out);
#elsesave_image(c, out);
#endif
}void letterbox_image_into(image im, int w, int h, image boxed)
{int new_w = im.w;int new_h = im.h;if (((float)w/im.w) < ((float)h/im.h)) {new_w = w;new_h = (im.h * w)/im.w;} else {new_h = h;new_w = (im.w * h)/im.h;}image resized = resize_image(im, new_w, new_h);embed_image(resized, boxed, (w-new_w)/2, (h-new_h)/2); free_image(resized);
}image letterbox_image(image im, int w, int h)
{int new_w = im.w;int new_h = im.h;if (((float)w/im.w) < ((float)h/im.h)) {new_w = w;new_h = (im.h * w)/im.w;} else {new_h = h;new_w = (im.w * h)/im.h;}image resized = resize_image(im, new_w, new_h);image boxed = make_image(w, h, im.c);fill_image(boxed, .5);//int i;//for(i = 0; i < boxed.w*boxed.h*boxed.c; ++i) boxed.data[i] = 0;embed_image(resized, boxed, (w-new_w)/2, (h-new_h)/2); free_image(resized);return boxed;
}image resize_max(image im, int max)
{int w = im.w;int h = im.h;if(w > h){h = (h * max) / w;w = max;} else {w = (w * max) / h;h = max;}if(w == im.w && h == im.h) return im;image resized = resize_image(im, w, h);return resized;
}image resize_min(image im, int min)
{int w = im.w;int h = im.h;if(w < h){h = (h * min) / w;w = min;} else {w = (w * min) / h;h = min;}if(w == im.w && h == im.h) return im;image resized = resize_image(im, w, h);return resized;
}image random_crop_image(image im, int w, int h)
{int dx = rand_int(0, im.w - w);int dy = rand_int(0, im.h - h);image crop = crop_image(im, dx, dy, w, h);return crop;
}augment_args random_augment_args(image im, float angle, float aspect, int low, int high, int w, int h)
{augment_args a = {0};aspect = rand_scale(aspect);int r = rand_int(low, high);int min = (im.h < im.w*aspect) ? im.h : im.w*aspect;float scale = (float)r / min;float rad = rand_uniform(-angle, angle) * TWO_PI / 360.;float dx = (im.w*scale/aspect - w) / 2.;float dy = (im.h*scale - w) / 2.;//if(dx < 0) dx = 0;//if(dy < 0) dy = 0;dx = rand_uniform(-dx, dx);dy = rand_uniform(-dy, dy);a.rad = rad;a.scale = scale;a.w = w;a.h = h;a.dx = dx;a.dy = dy;a.aspect = aspect;return a;
}image random_augment_image(image im, float angle, float aspect, int low, int high, int w, int h)
{augment_args a = random_augment_args(im, angle, aspect, low, high, w, h);image crop = rotate_crop_image(im, a.rad, a.scale, a.w, a.h, a.dx, a.dy, a.aspect);return crop;
}float three_way_max(float a, float b, float c)
{return (a > b) ? ( (a > c) ? a : c) : ( (b > c) ? b : c) ;
}float three_way_min(float a, float b, float c)
{return (a < b) ? ( (a < c) ? a : c) : ( (b < c) ? b : c) ;
}void yuv_to_rgb(image im)
{assert(im.c == 3);int i, j;float r, g, b;float y, u, v;for(j = 0; j < im.h; ++j){for(i = 0; i < im.w; ++i){y = get_pixel(im, i , j, 0);u = get_pixel(im, i , j, 1);v = get_pixel(im, i , j, 2);r = y + 1.13983*v;g = y + -.39465*u + -.58060*v;b = y + 2.03211*u;set_pixel(im, i, j, 0, r);set_pixel(im, i, j, 1, g);set_pixel(im, i, j, 2, b);}}
}void rgb_to_yuv(image im)
{assert(im.c == 3);int i, j;float r, g, b;float y, u, v;for(j = 0; j < im.h; ++j){for(i = 0; i < im.w; ++i){r = get_pixel(im, i , j, 0);g = get_pixel(im, i , j, 1);b = get_pixel(im, i , j, 2);y = .299*r + .587*g + .114*b;u = -.14713*r + -.28886*g + .436*b;v = .615*r + -.51499*g + -.10001*b;set_pixel(im, i, j, 0, y);set_pixel(im, i, j, 1, u);set_pixel(im, i, j, 2, v);}}
}// http://www.cs.rit.edu/~ncs/color/t_convert.html
void rgb_to_hsv(image im)
{assert(im.c == 3);int i, j;float r, g, b;float h, s, v;for(j = 0; j < im.h; ++j){for(i = 0; i < im.w; ++i){r = get_pixel(im, i , j, 0);g = get_pixel(im, i , j, 1);b = get_pixel(im, i , j, 2);float max = three_way_max(r,g,b);float min = three_way_min(r,g,b);float delta = max - min;v = max;if(max == 0){s = 0;h = 0;}else{s = delta/max;if(r == max){h = (g - b) / delta;} else if (g == max) {h = 2 + (b - r) / delta;} else {h = 4 + (r - g) / delta;}if (h < 0) h += 6;h = h/6.;}set_pixel(im, i, j, 0, h);set_pixel(im, i, j, 1, s);set_pixel(im, i, j, 2, v);}}
}void hsv_to_rgb(image im)
{assert(im.c == 3);int i, j;float r, g, b;float h, s, v;float f, p, q, t;for(j = 0; j < im.h; ++j){for(i = 0; i < im.w; ++i){h = 6 * get_pixel(im, i , j, 0);s = get_pixel(im, i , j, 1);v = get_pixel(im, i , j, 2);if (s == 0) {r = g = b = v;} else {int index = floor(h);f = h - index;p = v*(1-s);q = v*(1-s*f);t = v*(1-s*(1-f));if(index == 0){r = v; g = t; b = p;} else if(index == 1){r = q; g = v; b = p;} else if(index == 2){r = p; g = v; b = t;} else if(index == 3){r = p; g = q; b = v;} else if(index == 4){r = t; g = p; b = v;} else {r = v; g = p; b = q;}}set_pixel(im, i, j, 0, r);set_pixel(im, i, j, 1, g);set_pixel(im, i, j, 2, b);}}
}void grayscale_image_3c(image im)
{assert(im.c == 3);int i, j, k;float scale[] = {0.299, 0.587, 0.114};for(j = 0; j < im.h; ++j){for(i = 0; i < im.w; ++i){float val = 0;for(k = 0; k < 3; ++k){val += scale[k]*get_pixel(im, i, j, k);}im.data[0*im.h*im.w + im.w*j + i] = val;im.data[1*im.h*im.w + im.w*j + i] = val;im.data[2*im.h*im.w + im.w*j + i] = val;}}
}image grayscale_image(image im)
{assert(im.c == 3);int i, j, k;image gray = make_image(im.w, im.h, 1);float scale[] = {0.299, 0.587, 0.114};for(k = 0; k < im.c; ++k){for(j = 0; j < im.h; ++j){for(i = 0; i < im.w; ++i){gray.data[i+im.w*j] += scale[k]*get_pixel(im, i, j, k);}}}return gray;
}image threshold_image(image im, float thresh)
{int i;image t = make_image(im.w, im.h, im.c);for(i = 0; i < im.w*im.h*im.c; ++i){t.data[i] = im.data[i]>thresh ? 1 : 0;}return t;
}image blend_image(image fore, image back, float alpha)
{assert(fore.w == back.w && fore.h == back.h && fore.c == back.c);image blend = make_image(fore.w, fore.h, fore.c);int i, j, k;for(k = 0; k < fore.c; ++k){for(j = 0; j < fore.h; ++j){for(i = 0; i < fore.w; ++i){float val = alpha * get_pixel(fore, i, j, k) + (1 - alpha)* get_pixel(back, i, j, k);set_pixel(blend, i, j, k, val);}}}return blend;
}void scale_image_channel(image im, int c, float v)
{int i, j;for(j = 0; j < im.h; ++j){for(i = 0; i < im.w; ++i){float pix = get_pixel(im, i, j, c);pix = pix*v;set_pixel(im, i, j, c, pix);}}
}void translate_image_channel(image im, int c, float v)
{int i, j;for(j = 0; j < im.h; ++j){for(i = 0; i < im.w; ++i){float pix = get_pixel(im, i, j, c);pix = pix+v;set_pixel(im, i, j, c, pix);}}
}image binarize_image(image im)
{image c = copy_image(im);int i;for(i = 0; i < im.w * im.h * im.c; ++i){if(c.data[i] > .5) c.data[i] = 1;else c.data[i] = 0;}return c;
}void saturate_image(image im, float sat)
{rgb_to_hsv(im);scale_image_channel(im, 1, sat);hsv_to_rgb(im);constrain_image(im);
}void hue_image(image im, float hue)
{rgb_to_hsv(im);int i;for(i = 0; i < im.w*im.h; ++i){im.data[i] = im.data[i] + hue;if (im.data[i] > 1) im.data[i] -= 1;if (im.data[i] < 0) im.data[i] += 1;}hsv_to_rgb(im);constrain_image(im);
}void exposure_image(image im, float sat)
{rgb_to_hsv(im);scale_image_channel(im, 2, sat);hsv_to_rgb(im);constrain_image(im);
}void distort_image(image im, float hue, float sat, float val)
{rgb_to_hsv(im);scale_image_channel(im, 1, sat);scale_image_channel(im, 2, val);int i;for(i = 0; i < im.w*im.h; ++i){im.data[i] = im.data[i] + hue;if (im.data[i] > 1) im.data[i] -= 1;if (im.data[i] < 0) im.data[i] += 1;}hsv_to_rgb(im);constrain_image(im);
}void random_distort_image(image im, float hue, float saturation, float exposure)
{float dhue = rand_uniform(-hue, hue);float dsat = rand_scale(saturation);float dexp = rand_scale(exposure);distort_image(im, dhue, dsat, dexp);
}void saturate_exposure_image(image im, float sat, float exposure)
{rgb_to_hsv(im);scale_image_channel(im, 1, sat);scale_image_channel(im, 2, exposure);hsv_to_rgb(im);constrain_image(im);
}image resize_image(image im, int w, int h)
{image resized = make_image(w, h, im.c);   image part = make_image(w, im.h, im.c);int r, c, k;float w_scale = (float)(im.w - 1) / (w - 1);float h_scale = (float)(im.h - 1) / (h - 1);for(k = 0; k < im.c; ++k){for(r = 0; r < im.h; ++r){for(c = 0; c < w; ++c){float val = 0;if(c == w-1 || im.w == 1){val = get_pixel(im, im.w-1, r, k);} else {float sx = c*w_scale;int ix = (int) sx;float dx = sx - ix;val = (1 - dx) * get_pixel(im, ix, r, k) + dx * get_pixel(im, ix+1, r, k);}set_pixel(part, c, r, k, val);}}}for(k = 0; k < im.c; ++k){for(r = 0; r < h; ++r){float sy = r*h_scale;int iy = (int) sy;float dy = sy - iy;for(c = 0; c < w; ++c){float val = (1-dy) * get_pixel(part, c, iy, k);set_pixel(resized, c, r, k, val);}if(r == h-1 || im.h == 1) continue;for(c = 0; c < w; ++c){float val = dy * get_pixel(part, c, iy+1, k);add_pixel(resized, c, r, k, val);}}}free_image(part);return resized;
}void test_resize(char *filename)
{image im = load_image(filename, 0,0, 3);float mag = mag_array(im.data, im.w*im.h*im.c);printf("L2 Norm: %f\n", mag);image gray = grayscale_image(im);image c1 = copy_image(im);image c2 = copy_image(im);image c3 = copy_image(im);image c4 = copy_image(im);distort_image(c1, .1, 1.5, 1.5);distort_image(c2, -.1, .66666, .66666);distort_image(c3, .1, 1.5, .66666);distort_image(c4, .1, .66666, 1.5);show_image(im,   "Original");show_image(gray, "Gray");show_image(c1, "C1");show_image(c2, "C2");show_image(c3, "C3");show_image(c4, "C4");
#ifdef OPENCVwhile(1){image aug = random_augment_image(im, 0, .75, 320, 448, 320, 320);show_image(aug, "aug");free_image(aug);float exposure = 1.15;float saturation = 1.15;float hue = .05;image c = copy_image(im);float dexp = rand_scale(exposure);float dsat = rand_scale(saturation);float dhue = rand_uniform(-hue, hue);distort_image(c, dhue, dsat, dexp);show_image(c, "rand");printf("%f %f %f\n", dhue, dsat, dexp);free_image(c);cvWaitKey(0);}
#endif
}image load_image_stb(char *filename, int channels)
{int w, h, c;unsigned char *data = stbi_load(filename, &w, &h, &c, channels);if (!data) {fprintf(stderr, "Cannot load image \"%s\"\nSTB Reason: %s\n", filename, stbi_failure_reason());exit(0);}if(channels) c = channels;int i,j,k;image im = make_image(w, h, c);for(k = 0; k < c; ++k){for(j = 0; j < h; ++j){for(i = 0; i < w; ++i){int dst_index = i + w*j + w*h*k;int src_index = k + c*i + c*w*j;im.data[dst_index] = (float)data[src_index]/255.;}}}free(data);return im;
}image load_image(char *filename, int w, int h, int c)
{
#ifdef OPENCVimage out = load_image_cv(filename, c);
#elseimage out = load_image_stb(filename, c);
#endifif((h && w) && (h != out.h || w != out.w)){image resized = resize_image(out, w, h);free_image(out);out = resized;}return out;
}image load_image_color(char *filename, int w, int h)
{return load_image(filename, w, h, 3);
}image get_image_layer(image m, int l)
{image out = make_image(m.w, m.h, 1);int i;for(i = 0; i < m.h*m.w; ++i){out.data[i] = m.data[i+l*m.h*m.w];}return out;
}
void print_image(image m)
{int i, j, k;for(i =0 ; i < m.c; ++i){for(j =0 ; j < m.h; ++j){for(k = 0; k < m.w; ++k){printf("%.2lf, ", m.data[i*m.h*m.w + j*m.w + k]);if(k > 30) break;}printf("\n");if(j > 30) break;}printf("\n");}printf("\n");
}image collapse_images_vert(image *ims, int n)
{int color = 1;int border = 1;int h,w,c;w = ims[0].w;h = (ims[0].h + border) * n - border;c = ims[0].c;if(c != 3 || !color){w = (w+border)*c - border;c = 1;}image filters = make_image(w, h, c);int i,j;for(i = 0; i < n; ++i){int h_offset = i*(ims[0].h+border);image copy = copy_image(ims[i]);//normalize_image(copy);if(c == 3 && color){embed_image(copy, filters, 0, h_offset);}else{for(j = 0; j < copy.c; ++j){int w_offset = j*(ims[0].w+border);image layer = get_image_layer(copy, j);embed_image(layer, filters, w_offset, h_offset);free_image(layer);}}free_image(copy);}return filters;
} image collapse_images_horz(image *ims, int n)
{int color = 1;int border = 1;int h,w,c;int size = ims[0].h;h = size;w = (ims[0].w + border) * n - border;c = ims[0].c;if(c != 3 || !color){h = (h+border)*c - border;c = 1;}image filters = make_image(w, h, c);int i,j;for(i = 0; i < n; ++i){int w_offset = i*(size+border);image copy = copy_image(ims[i]);//normalize_image(copy);if(c == 3 && color){embed_image(copy, filters, w_offset, 0);}else{for(j = 0; j < copy.c; ++j){int h_offset = j*(size+border);image layer = get_image_layer(copy, j);embed_image(layer, filters, w_offset, h_offset);free_image(layer);}}free_image(copy);}return filters;
} void show_image_normalized(image im, const char *name)
{image c = copy_image(im);normalize_image(c);show_image(c, name);free_image(c);
}void show_images(image *ims, int n, char *window)
{image m = collapse_images_vert(ims, n);/*int w = 448;int h = ((float)m.h/m.w) * 448;if(h > 896){h = 896;w = ((float)m.w/m.h) * 896;}image sized = resize_image(m, w, h);*/normalize_image(m);save_image(m, window);show_image(m, window);free_image(m);
}void free_image(image m)
{if(m.data){free(m.data);}
}

三、重新编译 darknet

make clean

make -j

详细可参考 github

yolov3 darknet 中文标签 中文汉化相关推荐

  1. Piccure Plus 3.1中文汉化版,Piccure Plus 3.1破解版,模糊照片变清晰神器,让你不再害怕手抖了

    目前随着手机的普及化,大家随时随地都可以拍照,但是每个人拍照的水平各不相同,这种时候一款能把模糊的照片变清晰,把模糊的图片变清晰的软件就成了比不可少的东西了. Piccure Plus 3.1中文汉化 ...

  2. Axure7.0 以及 中文汉化语言包下载 axure汉化包

    支持 Axure RP Pro 正式版 当前最新版本 7.0.0.3184 不兼容6.5及以下版本! Axure7.0 下载地址:http://pan.baidu.com/s/1dEuR8YX Axu ...

  3. Docker管理面板Portainer中文汉化教程

    前言 Docker接触了一段时间了,批量操作过程中感觉太繁琐,所以找到了好评率比较高的Portainer面板,使用后感觉的确不错所以准备拿出来精力来做个汉化版,过程中发现词条非常多,所以暂时先汉化部分 ...

  4. Backtrack5中文汉化[转]

    Backtrack5中文汉化 首先  apt-get install language-support-zh language-pack-zh 安装完中文包后我们到Settings->Syste ...

  5. .text 0.958之间居的中文汉化下载

    .text 0.958之间居的中文汉化下载 http://218.19.140.219/uploadfile/040426192172.rar posted on 2004-06-14 20:19 浙 ...

  6. VMware安装kali linux 和中文汉化方法

    1.官网下载镜像: 链接:https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/ 选择适合 ...

  7. CentOS服务器上搭建Gitlab安装步骤、中文汉化详细步骤、日常管理以及异常故障排查

    CentOS服务器上搭建Gitlab安装步骤.中文汉化详细步骤.日常管理以及异常故障排查 参考文章: (1)CentOS服务器上搭建Gitlab安装步骤.中文汉化详细步骤.日常管理以及异常故障排查 ( ...

  8. MyEclipse 8.5中文汉化教程,图文版【转】

    为什么80%的码农都做不了架构师?>>>    MyEclipse 8.5中文汉化教程 收藏 首先下载 MyEclipse 8.5中文语言包: 下载地址:http://downloa ...

  9. IntelliJ IDEA 2020.3怎么设置成中文汉化

    IntelliJ IDEA 2020.3怎么设置成中文汉化 因为现在IDEA官方是支持汉化了,所以我们直接使用IDEA的插件 4. 下载Chinese汉化包 重启IDEA就可以看到页面都变成中文的了

  10. 皮肤美化润饰滤镜Imagenomic Portraiture 4.0.3 for PS/LR4032 WIN中文汉化版

    皮肤美化润饰滤镜Imagenomic Portraiture 4.0.3 for PS/LR4032 WIN中文汉化版 链接:https://pan.baidu.com/s/1qBloK697KZq2 ...

最新文章

  1. java.lang.NoSuchMethodError: javax.persistence.One
  2. python需要php吗-学python需要学linux吗
  3. 台式计算机桌面待机时间怎么调,如何设置电脑屏幕待机时间
  4. mysql安装图形化管理界面phpMyAdmin
  5. 走在技术前沿的 iOS 架构实现
  6. pythonista脚本合集_GitHub - xchenhao/You-are-Pythonista: 汇聚【Python应用】【Python实训】【Python技术分享】等等...
  7. PHP微信公众平台源码 支持多账号 仿pigcms 小猪微信 已经修改完毕 完整可用
  8. java读取各类型的文件
  9. dingtalk 推送手机号信息 golang_PureQuant使用功能介绍(二):通过配置模块导入API信息...
  10. Libevent源码分析-----开篇
  11. Altium Designer元件库常见获取方法
  12. chengg0769 近期文章列表 垂直搜索相关(2007-07-10)
  13. 国内主流Hybrid app工具平台推荐
  14. Linux加入Windows域
  15. CSS:flex实现骰子的6个面
  16. 《大话处理器》相关主题汇总
  17. 常用汇编命令OD命令总结
  18. 04-前端技术_ javaScript内置对象与DOM操作
  19. 华硕B250M+I5-7500黑苹果EFI引导文件
  20. Happy 2004(积性函数、快速幂取模、费马小定理、求因数和)

热门文章

  1. 解决windows 中python打开文本文档乱码问题
  2. (滑稽保命)对于《数据结构》严蔚敏教程的吐槽,附:详细代码
  3. html泰勒展开,常见的泰勒公式展开式大全
  4. 后门攻击阅读笔记,Input-aware dynamic backdoor attack
  5. python 005 __ 小斌文档 | 函数的定义和调用
  6. 视觉SLAM14讲笔记02:ch5针孔,双目相机模型
  7. 求一个序列所有区间不同数的个数之和
  8. 计算机术语int,整型(计算机语言)_百度百科
  9. Nginx模块开发之http handler实现流量统计(进阶篇)
  10. zoj 1101 Gamblers 为什么总是WA?