0. 图像批量处理一步到位:转格式(.jpg转.png)、尺寸(640*480)、位深度(RGB)等

import os
import glob
import os.path
from PIL import Image
from PIL import ImageFile        #批量修改尺寸2048*1024(此时也可能32位)
ImageFile.LOAD_TRUNCATED_IMAGES = Truepath = "G:\\Aerial\\"
files = os.listdir(path)          #会按顺序排列1,2,3,4,.png格式
i=0
for file in files:original = path + os.sep+ files[i]new = path + os.sep + str(i+1) + ".png"os.rename(original,new)i +=1
def Resize(file, outdir, width, height):imgFile = Image.open(file)try:newImage = imgFile.resize((width, height), Image.BILINEAR)newImage.save(os.path.join(outdir, os.path.basename(file)))except Exception as e:print(e)i = 0
a = 0
for file in glob.glob("G:\\Aerial\\*.png"): # 图片所在的目录# print(file)i += 1Resize(file, path, 640, 480)img = Image.open(file).convert('RGB')# 新图片存放的目录img.save(file)img1 = Image.open(file)# print(img1.getbands())  # ('P',) 这种是有彩色的,而L是没有彩色的# print(img1.size)if len(img1.getbands()) == 3:a +=1print(file)print('需要重新训练的图片数量:', i)
print('总图像是RGB的数量:', a)

检查下是否转化成功:

import os.path
from PIL import Image
from PIL import ImageFile        #批量修改尺寸2048*1024(此时也可能32位)
ImageFile.LOAD_TRUNCATED_IMAGES = True
import cv2path = "G:\\000\\image_ground150\\"files = os.listdir(path)
print(files)
i = 0
a = 0
c = 0
for pic in files:img = Image.open(os.path.join(path, pic))print(pic)print(img.getbands())  # ('P',) 这种是有彩色的,而L是没有彩色的print(img.size)i +=1# Img = np.array(img)# a = np.unique(Img)# print(a)    #看像素值if len(img.getbands()) == 3:a +=1size = img.sizew = size[0]  # 宽度h = size[1]  # 高度if w == 640:if h == 480:c += 1print('图像image的总数量: ', i)
print('总图像是RGB的数量:', a)
print('总图像是640*480的数量:', c)

1.批量排列1.2.3.4 统一成.png格式

import os
path = "F:/1207garbage classification/unknown"
files = os.listdir(path)          #会按顺序排列1,2,3,4,.png格式
i=0
for file in files:original = path + os.sep+ files[i]new = path + os.sep +"N12_"+ str(i+1) + ".png"os.rename(original,new)i+=1

有时候可能直接jpg转png就行,不用排序,转完格式和原图文件名保持一致:

# 以jpg转png为例,其他格式同理,
# 代码中路径更改为自己图像存放路径即可
from PIL import Image
import osimagesDirectory=r"D:\Images"  # jpg图片所在文件夹路径
distDirectory = os.path.dirname(imagesDirectory)# 保证jpg图像文件夹与png图像文件夹在同一目录下
distDirectory = os.path.join(distDirectory, "A")# 要存放png格式的文件夹路径
for imageName in os.listdir(imagesDirectory):imagePath = os.path.join(imagesDirectory, imageName)image = Image.open(imagePath)# 打开jpg图像distImagePath = os.path.join(distDirectory, imageName[:-4]+'.png')# 更改图像后缀为.png,并保证与原图像同名image.save(distImagePath)# 保存png图像

2.批量修改尺寸

import glob
import os.path
from PIL import Image
from PIL import ImageFile        #批量修改尺寸2048*1024(此时也可能32位)
ImageFile.LOAD_TRUNCATED_IMAGES = Truedef Resize(file, outdir, width, height):imgFile = Image.open(file)try:newImage = imgFile.resize((width, height), Image.BILINEAR)newImage.save(os.path.join(outdir, os.path.basename(file)))except Exception as e:print(e)for file in glob.glob("A/*.png"):  # 图片所在的目录Resize(file, "1/", 2048, 1024)  # 新图片存放的目录

3.批量统一到RGB三通道

from PIL import Image   #改成统一RGB通道
import ospath = "2"
save_path = "3"files = os.listdir(path)
print(files)for pic in files:img = Image.open(os.path.join(path, pic)).convert('RGB')print(pic)print(img.getbands())  # ('P',) 这种是有彩色的,而L是没有彩色的print(img.size)pic_new = os.path.join(save_path, pic)img.save(pic_new)

另一版本:

import glob
import os.path
import numpy as np
from PIL import Image
from PIL import ImageFile        #批量修改尺寸2048*1024(此时也可能32位)
ImageFile.LOAD_TRUNCATED_IMAGES = Truepath = "3"files = os.listdir(path)
print(files)for pic in files:img = Image.open(os.path.join(path, pic))print(pic)print(img.getbands())  # ('P',) 这种是有彩色的,而L是没有彩色的print(img.size)Img = np.array(img)a = np.unique(Img)print(a)    #看像素值

4.输出结果顺序、格式、位深通道、尺寸

5.labelme_json转mask

一步到位:

import cv2
import numpy as np
import json
import os.path
from PIL import Image
import globcategory_types = ["unlabeled","water"]h = 480
w = 640path = "G:\\V5_water\\json87"
filenames = os.listdir(path)
# for filename in filenames:
for filename in glob.glob("G:\\V5_water\\json87\\*.json"):mask = np.zeros([h, w, 1], np.uint8)# json_all = "G:\\0906\\json\\1.json"  # 原json路径json_all = os.path.join(path, filename)with open(json_all, 'r') as f: #json文件路径label = json.load(f)shapes = label["shapes"]for shape in shapes:category = shape["label"]points = shape["points"]#填充points_array = np.array(points, dtype=np.int32)mask = cv2.fillPoly(mask, [points_array], category_types.index(category))# if category == "road":    #高亮显示其中一个标签图像#     mask = cv2.fillPoly(mask, [points_array], 1)# # else:# if category == "sidewalk":#     mask = cv2.fillPoly(mask,[points_array], 2)# str = filename(len(ff):-5)name_json = os.path.split(json_all)[-1]    # '1.json'name = str(name_json)[0:-len('.json')] # '1'savename = "G:\\V5_water\\mask87\\" + name + ".png" # 需要在此路径下新建一个mask文件夹,结果图保存在此文件夹下面cv2.imwrite(savename, mask)img = Image.open(savename)Img = np.array(img)a = np.unique(Img)print(savename)print(mask.shape)print(img.getbands())print('像素值:',a)

不放心的话可以再试一次看看mask可视化效果:

import matplotlib.pyplot as plt
from matplotlib import gridspec
import numpy as np
import cv2
import osdef create_pascal_label_colormap():colormap = np.zeros((256, 3), dtype=int)ind = np.arange(256, dtype=int)for shift in reversed(range(8)):for channel in range(3):colormap[:, channel] |= ((ind >> channel) & 1) << shiftind >>= 3return colormapdef label_to_color_image(label):if label.ndim != 2:raise ValueError('Expect 2-D input label')colormap = create_pascal_label_colormap()if np.max(label) >= len(colormap):raise ValueError('label value too large.')return colormap[label]def vis_segmentation(image, seg_map):"""输入图片和分割 mask 的可视化."""plt.figure(figsize=(15, 5))grid_spec = gridspec.GridSpec(1, 4, width_ratios=[6, 6, 6, 1])plt.subplot(grid_spec[0])plt.imshow(image)plt.axis('off')plt.title('input image')plt.subplot(grid_spec[1])seg_image = label_to_color_image(seg_map).astype(np.uint8)plt.imshow(seg_image)plt.axis('off')plt.title('segmentation map')plt.subplot(grid_spec[2])plt.imshow(image)plt.imshow(seg_image, alpha=0.5)plt.axis('off')plt.title('segmentation overlay')unique_labels = np.unique(seg_map)ax = plt.subplot(grid_spec[3])plt.imshow(FULL_COLOR_MAP[unique_labels].astype(np.uint8), interpolation='nearest')ax.yaxis.tick_right()plt.yticks(range(len(unique_labels)), LABEL_NAMES[unique_labels])plt.xticks([], [])ax.tick_params(width=0.0)plt.grid('off')# plt.imsave('G:\\1\\' + image)# plt.show()LABEL_NAMES = np.asarray(['background', 'water'])  # 假设只有两类
FULL_LABEL_MAP = np.arange(len(LABEL_NAMES)).reshape(len(LABEL_NAMES), 1)
FULL_COLOR_MAP = label_to_color_image(FULL_LABEL_MAP)img_path = 'G:\\V5_water\\image87\\'   # img原图路径
png_path = 'G:\\V5_water\\mask87\\'   # mask输出全黑路径
i = 0
for img in os.listdir(img_path):print(img)imgfile = img_path + imgpngfile = png_path + imgnew_path = "G:\\V5_water\\plt\\" + img    #保存新的验证集val.txt测试结果可视化路径!!!img = cv2.imread(imgfile, 1)img = img[:, :, ::-1]seg_map = cv2.imread(pngfile, 0)vis_segmentation(img, seg_map)plt.savefig(new_path)plt.close()i +=1print('可视化总数量:',i)
print('Done.')

结果可视化如下:

如果原图是jpg,需要生成png格式进行训练的话:

import matplotlib.pyplot as plt
from matplotlib import gridspec
import numpy as np
import cv2
import os
from PIL import Imagedef create_pascal_label_colormap():colormap = np.zeros((256, 3), dtype=int)ind = np.arange(256, dtype=int)for shift in reversed(range(8)):for channel in range(3):colormap[:, channel] |= ((ind >> channel) & 1) << shiftind >>= 3return colormapdef label_to_color_image(label):if label.ndim != 2:raise ValueError('Expect 2-D input label')colormap = create_pascal_label_colormap()if np.max(label) >= len(colormap):raise ValueError('label value too large.')return colormap[label]def vis_segmentation(image, seg_map):"""输入图片和分割 mask 的可视化."""plt.figure(figsize=(15, 5))grid_spec = gridspec.GridSpec(1, 4, width_ratios=[6, 6, 6, 1])plt.subplot(grid_spec[0])plt.imshow(image)plt.axis('off')plt.title('input image')plt.subplot(grid_spec[1])seg_image = label_to_color_image(seg_map).astype(np.uint8)plt.imshow(seg_image)plt.axis('off')plt.title('segmentation map')plt.subplot(grid_spec[2])plt.imshow(image)plt.imshow(seg_image, alpha=0.5)plt.axis('off')plt.title('segmentation overlay')unique_labels = np.unique(seg_map)ax = plt.subplot(grid_spec[3])plt.imshow(FULL_COLOR_MAP[unique_labels].astype(np.uint8), interpolation='nearest')ax.yaxis.tick_right()plt.yticks(range(len(unique_labels)), LABEL_NAMES[unique_labels])plt.xticks([], [])ax.tick_params(width=0.0)plt.grid('off')# plt.imsave('G:\\1\\' + image)# plt.show()LABEL_NAMES = np.asarray(['background', 'water'])  # 假设只有两类
FULL_LABEL_MAP = np.arange(len(LABEL_NAMES)).reshape(len(LABEL_NAMES), 1)
FULL_COLOR_MAP = label_to_color_image(FULL_LABEL_MAP)# img_path = 'E:\\add_water1102\\FloW_IMG(water_segementation)\\image640x320\\'   # img原图路径
img_path = 'E:\\add_water1102\\FloW_IMG(water_segementation)\\all_images\\'
png_path = 'E:\\add_water1102\\FloW_IMG(water_segementation)\\all_masks\\'   # mask输出全黑路径
i = 0
new_input_path = 'E:\\add_water1102\\FloW_IMG(water_segementation)\\all_image_png\\'  # 如果是jpg的话会有生成png的路径
plt_path = "E:\\add_water1102\\FloW_IMG(water_segementation)\\plt\\"if not os.path.exists(new_input_path):os.makedirs(new_input_path)for img in os.listdir(img_path):print(img)imgfile = img_path + imga = Image.open(imgfile)a = a.resize((640, 480), Image.BILINEAR)a.save(imgfile)if img.endswith('.jpg'):img = img.replace(".jpg", ".png")if not os.path.exists(new_input_path):os.makedirs(new_input_path)else:passpngfile = png_path + imgb = Image.open(pngfile)b = b.resize((640, 480), Image.BILINEAR)b.save(pngfile)a = cv2.imread(imgfile)cv2.imwrite(new_input_path + img, a)new_path = plt_path + img  # 保存新的验证集val.txt测试结果可视化路径!!!img = cv2.imread(new_input_path + img, 1)img = img[:, :, ::-1]seg_map = cv2.imread(pngfile, 0)vis_segmentation(img, seg_map)plt.savefig(new_path)plt.close()i += 1else:# 原图pngpngfile = png_path + imgb = Image.open(pngfile)b = b.resize((640, 480), Image.BILINEAR)b.save(pngfile)new_path = plt_path + img.split(".")[0] + ".png"    #保存新的验证集val.txt测试结果可视化路径!!!img = cv2.imread(imgfile, 1)img = img[:, :, ::-1]seg_map = cv2.imread(pngfile, 0)vis_segmentation(img, seg_map)plt.savefig(new_path)plt.close()i +=1print('可视化总数量:',i)
print('Done.')

另一种bat大法:


1.bat文件

for %%m in (G:\haha\1\*.json) do (
python G:\labelme_json.py %%m
)

python文件:

import cv2
import numpy as np
import json
import sysdef main(argv):category_types = ["unlabeled","road line","sidewalk line"]h = 480w = 640mask = np.zeros([h, w, 1], np.uint8)filename = argv[1]with open(filename, "r") as f: #json文件路径label = json.load(f)shapes = label["shapes"]for shape in shapes:category = shape["label"]points = shape["points"]#填充points_array = np.array(points, dtype=np.int32)mask = cv2.fillPoly(mask, [points_array], category_types.index(category))# if category == "B":    #高亮显示其中一个标签图像#     mask = cv2.fillPoly(mask, [points_array], 255)# else:#     mask = cv2.fillPoly(mask,[points_array],category_types.index(category))ff = "G:/0811json/json/" #原json路径str = filename[len(ff):-5]savename = "G:/0811json/mask/" + str + ".png" # 需要在此路径下新建一个mask文件夹,结果图保存在此文件夹下面print(savename)cv2.imwrite(savename, mask)#cv2.waitKey(0)if __name__ == '__main__':main(sys.argv)

6.增强后!生成train.txt和val.txt路径

# 导入数据增强工具
import Augmentor# 确定原始图像存储路径以及掩码文件存储路径
p = Augmentor.Pipeline("image200") # 原图和mask的标签要一一对应!!扩充后的图都在原图里面新生成output的文件夹!
p.ground_truth("mask200") #标签图mask# 图像旋转: 按照概率0.8执行,最大左旋角度10,最大右旋角度10
p.rotate(probability=0.8, max_left_rotation=10, max_right_rotation=10)# 图像左右互换: 按照概率0.5执行
p.flip_left_right(probability=0.5)# 图像放大缩小: 按照概率0.8执行,面积为原始图0.85倍
p.zoom_random(probability=0.3, percentage_area=0.85)# 最终扩充的数据样本数(200到2000张,扩充了十倍)
p.sample(2000)

随机种子(比例9:1)生成训练和验证集666:(最新版)

from __future__ import absolute_import, print_function, division
import os
import randomimg_root = '.\\1\\'train_labeltxt = ".\\1\\train.txt"val_labeltxt = ".\\1\\val.txt"def get_img_mask_from_dir(data_dir, split_rate=0.1, random_seed=666):""":param data_dir: 图片数据存放路径:param split_rate: 拆分验证集的比例:param random_seed: 随机种子:return:"""train_paths = []val_paths = []for sub_dir in os.listdir(data_dir):if sub_dir == 'a30':  # 原图文件夹sub_path = os.path.join(data_dir, sub_dir)image_names = os.listdir(sub_path)nrof_img = len(image_names)indx = list(range(nrof_img))random.shuffle(indx, random.seed(random_seed))mask_dir = 'b30'   # mask文件夹mask_path = os.path.join(data_dir, mask_dir)mask_names = os.listdir(mask_path)# 原图和MASK名字对应索引# train_paths.extend([(os.path.join(sub_dir, image_names[i]).replace('\\', '/'), os.path.join(mask_dir, f'{os.path.splitext(image_names[i])[0]}.png').replace('\\', '/')) for i in indx[int(nrof_img*split_rate):]])# 原图和MASK名字按顺序索引train_paths.extend([(os.path.join(sub_dir, image_names[i]).replace('\\', '/'), os.path.join(mask_dir,f'{os.path.splitext(mask_names[i])[0]}.png').replace('\\', '/')) for i in indx[int(nrof_img*split_rate):]])val_paths.extend([(os.path.join(sub_dir, image_names[i]).replace('\\', '/'), os.path.join(mask_dir, f'{os.path.splitext(mask_names[i])[0]}.png').replace('\\', '/')) for i in indx[:int(nrof_img*split_rate)]])else:continuereturn train_paths, val_pathsif __name__ == '__main__':train_path, val_path = get_img_mask_from_dir(img_root, split_rate=0.1, random_seed=666)print('训练集数量train_path:',len(train_path))print('验证集数量val_path:',len(val_path))with open(train_labeltxt, 'a') as f:for line in train_path:f.write(line[0]+','+line[1]+'\n')with open(val_labeltxt, 'a') as f:for line in val_path:f.write(line[0]+','+line[1]+'\n')

随机生成训练和验证集:(旧版本)

from __future__ import absolute_import, print_function, division
import os
import randomimg_root = 'G:/water/'train_labeltxt = "G:/water/train.txt"val_labeltxt = "G:/water/val.txt"def get_img_mask_from_dir(data_dir, split_rate=0.1, random_seed=666):""":param data_dir: 图片数据存放路径:param split_rate: 拆分验证集的比例:param random_seed: 随机种子:return:"""train_paths = []val_paths = []for sub_dir in os.listdir(data_dir):if sub_dir == 'test0':sub_path = os.path.join(data_dir, sub_dir)image_names = os.listdir(sub_path)nrof_img = len(image_names)indx = list(range(nrof_img))random.shuffle(indx, random.seed(random_seed))mask_dir = 'mask0'train_paths.extend([(os.path.join(sub_dir, image_names[i]).replace('\\', '/'), os.path.join(mask_dir, f'{os.path.splitext(image_names[i])[0]}.png').replace('\\', '/')) for i in indx[int(nrof_img*split_rate):]])val_paths.extend([(os.path.join(sub_dir, image_names[i]).replace('\\', '/'), os.path.join(mask_dir, f'{os.path.splitext(image_names[i])[0]}.png').replace('\\', '/')) for i in indx[:int(nrof_img*split_rate)]])else:continuereturn train_paths, val_pathsif __name__ == '__main__':train_path, val_path = get_img_mask_from_dir(img_root, split_rate=0.1, random_seed=666)print('train_path:',len(train_path))print('val_path:',len(val_path))with open(train_labeltxt, 'a') as f:for line in train_path:f.write(line[0]+','+line[1]+'\n')with open(val_labeltxt, 'a') as f:for line in val_path:f.write(line[0]+','+line[1]+'\n')

不用新建train.txt 自动生成(旧版本)

(旧版本)

import ostrain_image_path = 'image/'
train_label_path = 'mask/'label_list = []
image_list = []train_image_dir = sorted(os.listdir(train_image_path))
train_label_dir = sorted(os.listdir(train_label_path))#print(train_label_dir)
file = './train.txt'
with open(file, 'w') as f:for n1, n2 in zip(train_image_dir, train_label_dir):train_single_image = os.path.join(train_image_path, n1)train_single_label = os.path.join(train_label_path, n2)# print(train_single_label)f.write(train_single_image + ',' + train_single_label + '\n')f.close()

生成train.txt(旧版本)

7.用linux命令将.txt按照行打散

shuf 6.txt -o output.txt


打散前:

打散后:

可视化mask:

import matplotlib.pyplot as plt
from matplotlib import gridspec
import numpy as np
import cv2def create_pascal_label_colormap():colormap = np.zeros((256, 3), dtype=int)ind = np.arange(256, dtype=int)for shift in reversed(range(8)):for channel in range(3):colormap[:, channel] |= ((ind >> channel) & 1) << shiftind >>= 3return colormapdef label_to_color_image(label):if label.ndim != 2:raise ValueError('Expect 2-D input label')colormap = create_pascal_label_colormap()if np.max(label) >= len(colormap):raise ValueError('label value too large.')return colormap[label]def vis_segmentation(image, seg_map):"""输入图片和分割 mask 的可视化."""plt.figure(figsize=(15, 5))grid_spec = gridspec.GridSpec(1, 4, width_ratios=[6, 6, 6, 1])plt.subplot(grid_spec[0])plt.imshow(image)plt.axis('off')plt.title('input image')plt.subplot(grid_spec[1])seg_image = label_to_color_image(seg_map).astype(np.uint8)plt.imshow(seg_image)plt.axis('off')plt.title('segmentation map')plt.subplot(grid_spec[2])plt.imshow(image)plt.imshow(seg_image, alpha=0.7)plt.axis('off')plt.title('segmentation overlay')unique_labels = np.unique(seg_map)ax = plt.subplot(grid_spec[3])plt.imshow(FULL_COLOR_MAP[unique_labels].astype(np.uint8), interpolation='nearest')ax.yaxis.tick_right()plt.yticks(range(len(unique_labels)), LABEL_NAMES[unique_labels])plt.xticks([], [])ax.tick_params(width=0.0)plt.grid('off')plt.show()LABEL_NAMES = np.asarray(['background', 'water']) # 假设只有两类
FULL_LABEL_MAP = np.arange(len(LABEL_NAMES)).reshape(len(LABEL_NAMES), 1)
FULL_COLOR_MAP = label_to_color_image(FULL_LABEL_MAP)imgfile = '1.png'
pngfile = '2.png'
img = cv2.imread(imgfile, 1)
img = img[:,:,::-1]
seg_map = cv2.imread(pngfile, 0)
vis_segmentation(img, seg_map)print('Done.')

20210810 所有图像数据准备一条龙(labelme_json转mask、数据增强Augmentor、随机种子设比例生成train.val、转格式(.jpg转.png)、尺寸、位深度变换相关推荐

  1. Radiology:影像组学:图像不仅仅是图片,它们还是数据

    在过去十年中,随着模式识别方法的增加和数据集大小的增加,医学图像分析领域的研究越来越多.这些研究促进了对图像定量特征高通量提取过程的发展,从而将图像转换为可挖掘数据特征,并随后对这些数据进行分析,以提 ...

  2. (1)【数据隐藏】一起入门隐写吧,宝?word、图像、移动设备、文件压缩数据隐藏

    目录 第2章 数据隐藏简单练习4则 2.1​  在word中隐藏数据 ​如何在word中隐藏数据?(包含不易被发现的傻瓜方法) ​如何设置显示隐藏文字?(微软自带) ​如何检测隐藏在文档里的信息?(避 ...

  3. JPG图像exif和XPM信息中GPS数据姿态数据航向角数据的提取

    JPG图像的编码相关内容太多不在多说了大家随手能查很多资料. 今天重点说说图像数据中的GPS信息以及飞机.相机姿态角度数据提取. JPG作为复杂的图像数据很多人都知道存在一个叫做EXIF的数据规范,在 ...

  4. 图像位深度 8位 16位 24位 32位区别对比 RGB 真彩色 基本概念:(大小,深度,通道)位深度数据类型转换原理 Mat数据读取(opencv里的imread)

    位深度 位深度是指在记录数字图像的颜色时,计算机实际上是用每个像素需要的二进制数值位数来表示的.计算机之所以能够显示颜色,是采用了一种称作"位"( bit ) 的记数单位来记录所表 ...

  5. 使用 LJ1-01 夜间灯光图像检测县域经济发展:与 NPP-VIIRS 数据的比较

    抽象的 夜间灯光(NTL)遥感数据已被广泛用于推导国家和区域尺度的社会经济指标,以研究区域经济发展.然而,以往的研究大多只选择单一的衡量指标(如GDP),采用简单的回归方法,基于DMSP-OLS或NP ...

  6. 图像搜索引擎1|使用Python颜色直方图在数据集中搜索视觉上相似的图像

    图像搜索引擎1|使用Python颜色直方图在数据集中搜索视觉上相似的图像 这篇博客将介绍如何从头到尾创建图像搜索引擎.第一步是选择一个图像描述符--使用3D RGB直方图来表征图像的颜色.然后通过提取 ...

  7. 耕耘数据,融合发展——2018年度数据科学研究院RONG教授座谈会成功举办

    2018年05月07日,以"耕耘数据.融合发展"为主题的2018年度数据科学研究院(以下简称"数据院")RONG教授座谈会于双清大厦拉开帷幕.数据院院长俞士纶. ...

  8. 《企业大数据系统构建实战:技术、架构、实施与应用》——第3章 企业大数据解决方案 3.1 企业大数据解决方案实现方式...

    本节书摘来自华章计算机<企业大数据系统构建实战:技术.架构.实施与应用>一书中的第3章,第3.1节,作者 吕兆星 郑传峰 宋天龙 杨晓鹏,更多章节内容可以访问云栖社区"华章计算机 ...

  9. 四说大数据时代“神话”:从大数据到深数据\n

    作为国内最大的电商平台之一,苏宁每天要处理数量巨大的数据.为了更快速高效地处理这些数据,苏宁调度平台采取了哪些措施呢? 本文是苏宁大数据离线任务开发调度平台实践系列文章之上篇,详解苏宁的任务调度模块. ...

最新文章

  1. linux线程池实现多线程并发,基于Linux的多线程池并发Web服务器设计-电子设计工程.PDF...
  2. mark一下总是记混的重定向与转发的区别
  3. Ubuntu12.04安装中文字体,解决导出图片乱码
  4. java textfield 数字,如何将整数转换为文本以便在textfield java-blackberry中使用
  5. 第十四章:详解Jenkins节点配置
  6. Android之在linux环境不通过TAG快速过滤日志
  7. starter_您是否尝试过MicroProfile Starter?
  8. sharepoint 2007功能增强解决方案,资料收集
  9. 设置office首字母不变大小的手段
  10. 十大算法 — 插入排序法【C语言代码诠释】
  11. 讲解NPN与PNP三极管做开关管使用方法与计算
  12. Zookeeper,集群管理之独孤求败
  13. android6 wifi耗电,移动端耗电量测试方法总结
  14. Oracle Database 10g for Windows安装
  15. [易飞]关于自制件调整为虚设件的处理方案
  16. 提取DWI数据的FA和MD
  17. 基于飞凌i.MX6Q-C核心板搭建3D相机
  18. js前端base64转码解码
  19. [QNX 自适应分区用户指南]12 APS开发实践
  20. 程序员职场规划:你的命运不是一头骡子

热门文章

  1. 浅谈网络游戏的设计——服务器端编程 (3)
  2. 程序员因重复记录日志撑爆ELK被辞退!
  3. 基于Flink的在线机器学习系统架构探讨
  4. 阿里巴巴电商搜索推荐实时数仓演进之路
  5. 懂了!VMware/KVM/Docker原来是这么回事儿
  6. 一步一图,带你了解分布式架构的前世今生!
  7. 程序员这样面试,拿到offer的几率是90%!
  8. 在这个时代,如何管理好95后员工?
  9. 王兴和张一鸣和我们的互联网启蒙
  10. Q-learning