如何使用百度云人工智能API

百度云已经提供了一批人工智能基础应用API供广大开发者调用以实现各种应用场景,要调用百度云人工智能API首先要获得API Key和SecretKey,本文描述如何获取这两个Key信息。

  1. 浏览器打开https://cloud.baidu.com/网站,点击右上角的管理控制台,会弹出登录页面,使用百度账号进行登录(如没有可在登录页面注册一个)

    如何使用百度云人工智能API
  2. 进入管理控制台后,在右侧的菜单中选择产品服务–>人工智能–>任意类别(如文字识别)

    如何使用百度云人工智能API
  3. 选择创建应用(这实际上就是一个申明,告诉百度说我有意向要调用你的API,请给我访问所需要的Key参数),应用名称随便填写,应用类型根据自己情况选择,接口根据自己的需要选择,应用平台根据调用API的程序所运行的平台选择,可全选,其余选项默认即可

    如何使用百度云人工智能API
    如何使用百度云人工智能API
  4. 4

    应用创建完成后在应用列表页面中看到API Key和SecretKey两个参数,复制出来给调用程序使用即可。

wordpress文章排序问题

Hestia模板的首页博客区域展示的文章默认是倒序排列,导致发布新文章后就会显示在首页博客文章第一项,不能固定显示指定的几篇文章。
解决方法:
编辑inc/views/front-page/class-hestia-blog-section.php
$loop = new WP_Query( $args );这一行的上面增加一行:
$args['order'] = 'ASC';

指定排序方式就可以了。

线型图统计

自用的线型图统计源码

package com.zhikey.kean.MyView;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.CornerPathEffect;
import android.graphics.DashPathEffect;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;

import java.math.BigDecimal;
import java.util.ArrayList;

/**
* Created by Boer on 2015/5/12.
* 曲线图
*/
public class Graph extends View {
float yLineHeight = 0f, yLineStartX = 0f, yLineStartY = 0f, yLineStopX = 0f, yLineStopY = 0f;
float xLineWidth = 0f, xLineStartX = 0f, xLineStartY = 0f, xLineStopX = 0f, xLineStopY = 0f;
ArrayList points = null;

float maxPoint = 0f;
int yScaleNumber = 3; //Y轴刻度数
int decimalDigits = 1; //小数位数
int roundRadius = 0; //路径圆角半径
int pointStyle = 0; //0.不绘制;1.方点;1.圆圈;2.实心圆圈
int linearGradientColor1 = 0x66E0420D; //渐变色起始颜色
int linearGradientColor2 = 0x66E0B20D; //渐变色结束颜色
int xGridLinearColor = 0xED52A0DA;//x网格线颜色
int yGridLinearColor = 0xED52A0DA;//y网格线颜色
int pointColor = 0xFF007BC0; //数值点颜色
int pathBoldColor = 0XFF007BC0; //路径强调线颜色
int frameLinearColor = 0XFF007BC0; //边框线颜色
int xTextColor = 0xFF333333; //X文本颜色
int yTextColor = 0xFF333333; //y文本颜色
int pointTextColor = 0xFF000000; //数值文本颜色
int xTextSize = 22; //x轴文本尺寸
int yTextSize = 20; //y轴文本尺寸
int pointTextSize = 20; //数值文本尺寸
boolean isYScaleText = true; //是否显示Y轴刻度
boolean isXScaleText = true; //是否显示X轴刻度
boolean isPointText = false; //是否显示数值文本
boolean isXGrid = true; //是否显示X网格线
boolean isYGrid = false; //是否显示Y网格线
boolean isXFrame = true; //是否显示X边框
boolean isYFrame = false; //是否显示Y边框
boolean isXScaleStartBlank = true; //x轴首部留空
boolean isXScaleStopBlank = true; //x轴结尾留空
boolean isXGridDotted = true;//x网格线是否虚线
boolean isYGridDotted = true;//y网格线是否虚线
int pathBoldLineWidth = 2;//强调线宽度
int frameLineWidth = 3; //边框线宽度
int gridLineWidth = 1; //网格线宽度
Shader mShader = null; //填充区域着色器
boolean isShowTextTag = false;//是否显示标签
int tagIndex = 0;//要显示标签的索引
boolean isShowValues = true; //是否显示标签数据值
String tagTextPrefix = ""; //标签前缀文本
String tagTextSuffix = ""; //标签文本后缀
int tagBackColor = 0xFFDDDDDD;//标签背景颜色
int tagTextColor = 0xFF666666;//标签文本颜色
int tagTextSize = 26;//标签文本尺寸

public Graph(Context context, AttributeSet attrs) {
super(context, attrs);
}

/**
* 画出图形
*/
public void draw() {
invalidate();
}

/**
* 设置是否显示标签, 注意: 标签可能覆盖掉数据值显示,两者最好不同时显示
*
* @param showTextTag 设置是否显示标签
* @param index 要显示标签的索引 , 索引从 0 开始
* @param showValues 标签中是否显示数据值
* @param tagTextPrefix 标签文本前缀,显示在标签数据之前
* @param tagTextSuffix 标签文本后缀,显示在标签税局之后
*/
public void setShowTextTag(boolean showTextTag, int index, boolean showValues, String tagTextPrefix
, String tagTextSuffix) {
isShowTextTag = showTextTag;
tagIndex = index;
isShowValues = showValues;
this.tagTextPrefix = tagTextPrefix;
this.tagTextSuffix = tagTextSuffix;
}

/**
* 设置标签背景颜色
*
* @param color 颜色
*/
public void setTagBackColor(int color) {
this.tagBackColor = color;
}

/**
* 设置标签文本颜色
*
* @param color 颜色
*/
public void setTagTextColor(int color) {
this.tagTextColor = color;
}

/**
* 设置标签文本尺寸
*
* @param size 文字尺寸
*/
public void setTagTextSize(int size) {
this.tagTextSize = size;
}

/**
* 设置X轴刻度尾部是否留空
*
* @param is 是否留空
*/
public void setXScaleStopBlank(boolean is) {
isXScaleStopBlank = is;
}

/**
* 设置X轴刻度首部是否留空
*
* @param is 是否留空
*/
public void setXScaleStartBlank(boolean is) {
isXScaleStartBlank = is;
}

/**
* 设置路径强调线宽度
*
* @param width 宽度
*/
public void setPathBoldLineWidth(int width) {
pathBoldLineWidth = width;
}

/**
* 设置路径强调线颜色
*
* @param color 颜色
*/
public void setPathBoldColor(int color) {
pathBoldColor = color;
}

/**
* 设置X轴刻度文本尺寸
*
* @param size 尺寸
*/
public void setXTextSize(int size) {
xTextSize = size;
}

/**
* 设置Y轴刻度文本尺寸
*
* @param size 尺寸
*/
public void setYTextSize(int size) {
yTextSize = size;
}

/**
* 设置数值文本尺寸
*
* @param size 尺寸
*/
public void setPointTextSize(int size) {
pointTextSize = size;
}

/**
* 设置数值文本颜色
*
* @param color 颜色
*/
public void setPointTextColor(int color) {
pointTextColor = color;
}

/**
* 设置Y轴刻度文本颜色
*
* @param color 颜色
*/
public void setYTextColor(int color) {
yTextColor = color;
}

/**
* 设置X轴刻度文本颜色
*
* @param color 颜色
*/
public void setXTextColor(int color) {
xTextColor = color;
}

/**
* 设置边框颜色线
*
* @param color 颜色
*/
public void setFrameLinearColor(int color) {
frameLinearColor = color;
}

/**
* 设置数值点图形颜色
*
* @param color 颜色
*/
public void setPointColor(int color) {
pointColor = color;
}

/**
* 设置小数保留位数
*
* @param num 位数
*/
public void setDecimalDigits(int num) {
decimalDigits = num;
if (decimalDigits < 0) { decimalDigits = 0; } } /** * 设置是否显示数值文本 * * @param is 是否显示数值文本 */ public void setShowPointText(boolean is) { isPointText = is; } /** * 是否显示X轴刻度文本 * * @param is 是否显示文本 */ public void setShowXScaleText(boolean is) { isXScaleText = is; } /** * 是否显示Y轴刻度文本 * * @param is 是否显示文本 */ public void setShowYScaleText(boolean is) { isYScaleText = is; } /** * 设置是否显示边框以及边框相关配置 * * @param x 是否显示X边框 * @param y 是否显示Y边框 */ public void setShowFrameLinear(boolean x, boolean y) { isXFrame = x; isYFrame = y; } /** * 设置是否显示边框以及边框相关配置 * * @param x 是否显示X边框 * @param y 是否显示Y边框 * @param width 边框宽度 */ public void setShowFrameLinear(boolean x, boolean y, int width) { isXFrame = x; isYFrame = y; frameLineWidth = width; } /** * 设置是否显示网格线以及网格线相关配置 * * @param x 是否显示X网格线 * @param y 是否显示Y网格线 * @param xDotted X网格线是否虚线 * @param yDotted Y网格线是否虚线 */ public void setShowGridLinear(boolean x, boolean y, boolean xDotted, boolean yDotted) { isXGrid = x; isYGrid = y; isXGridDotted = xDotted; isYGridDotted = yDotted; } /** * 设置是否显示网格线以及网格线相关配置 * * @param x 是否显示X网格线 * @param y 是否显示Y网格线 * @param xDotted X网格线是否虚线 * @param yDotted Y网格线是否虚线 * @param width 网格线画笔宽度 */ public void setShowGridLinear(boolean x, boolean y, boolean xDotted, boolean yDotted, int width) { isXGrid = x; isYGrid = y; isXGridDotted = xDotted; isYGridDotted = yDotted; gridLineWidth = width; } /** * 设置网格线颜色 * * @param xColor X网格线颜色 * @param yColor Y网格线颜色 */ public void setxGridLinearColor(int xColor, int yColor) { xGridLinearColor = xColor; yGridLinearColor = yColor; } /** * 设置渐变填充颜色 * * @param color1 定点颜色 * @param color2 底部颜色 */ public void setLinearGradientColor(int color1, int color2) { linearGradientColor1 = color1; linearGradientColor2 = color2; } /** * 设置图标填充部分着色器,会覆盖已设置的 linearGradientColor; * * @param shader 着色器 */ public void setShader(Shader shader) { mShader = shader; } /** * 设置数据点绘制类型 * * @param style 0.不绘制;1.方点;1.圆圈;2.实心圆圈 */ public void setPointStyle(int style) { pointStyle = style; } /** * 设置要统计的数据 * * @param p 数据组,包含数据值与X轴刻度标题 */ public void setPoints(ArrayList p) {
points = p;
}

/**
* 设置Y轴刻度横线数目
*
* @param n 刻度数目,0 - 100。
*/
public void setYScaleNumber(int n) {
yScaleNumber = n;
if (yScaleNumber > 100) {
yScaleNumber = 100;
}
if (yScaleNumber < 0) { yScaleNumber = 0; } } /** * 设置数据点联线圆角半径 * * @param radius 圆角半径 */ public void setRoundRadius(int radius) { roundRadius = radius; if (roundRadius < 0) roundRadius = 0; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); float tagX = 0, tagY = 0; String mTagText = ""; RectF rectF = null; //canvas.drawColor(backColor);//设置底色 Paint paint = new Paint(); paint.setAntiAlias(true);//抗锯齿 yLineHeight = getHeight() - 30 - 60;//竖线高度 yLineStartX = 30f; yLineStartY = 30f; yLineStopX = yLineStartX; yLineStopY = yLineHeight + yLineStartY; xLineWidth = getWidth() - yLineStartX - 30;//横线长度 xLineStartX = yLineStartX; xLineStartY = yLineStopY; xLineStopX = xLineStartX + xLineWidth; xLineStopY = xLineStartY; /** * 绘制中间横线 */ if (isXGrid) { paint.setStrokeWidth(gridLineWidth);//画笔宽度 paint.setColor(xGridLinearColor); paint.setStyle(Paint.Style.STROKE);//填充风格 //顶部横线 canvas.drawLine(xLineStartX, yLineStartY, xLineStopX, yLineStartY, paint); //中间横线 int xNum = 0; while (xNum < yScaleNumber) { float y = yLineStartY + yLineHeight / (yScaleNumber + 1) * (xNum + 1); if (isXGridDotted) { //如果绘制虚线 Path path = new Path(); path.moveTo(xLineStartX, y); path.lineTo(xLineStopX, y); PathEffect effects = new DashPathEffect(new float[]{4, 4, 4, 4}, 1); paint.setPathEffect(effects); canvas.drawPath(path, paint); paint.setPathEffect(null); } else { canvas.drawLine(xLineStartX, y, xLineStopX, y, paint);//横线 } xNum++; } } /** * 绘制数值点 */ if (points != null && points.size() > 0) {
//取最大数值
maxPoint = 0f;
for (GraphPoint v : points) {
if (v.number > maxPoint)
maxPoint = v.number;
}
paint.setTextAlign(Paint.Align.CENTER);//文字居中对齐
Path path1 = new Path();//新建一个路径
Path path2 = new Path();//新建一个路径
if (!isXScaleStartBlank) {
path2.moveTo(xLineStartX, xLineStartY);//填充部分从左下起点开始
}
int pNum = points.size();
float x = 0, y = 0;
for (int i = 0; i < points.size(); i++) { x = xLineStartX + xLineWidth / (pNum - 1) * i; if (isXScaleStartBlank || isXScaleStopBlank) { if (isXScaleStartBlank && isXScaleStopBlank) { //如果首部留空并且结尾留空 x = xLineStartX + xLineWidth / (pNum + 1) * (i + 1); } else if (isXScaleStartBlank) { //如果首部留空 x = xLineStartX + xLineWidth / pNum * (i + 1); } else { //如果结尾留空 x = xLineStartX + xLineWidth / pNum * i; } } y = yLineStartY + (yLineHeight - yLineHeight / maxPoint * points.get(i).number); //线高-线高/最大值*当前值 if (i == 0) { path1.moveTo(x, y);//从第一个点开始画 if (isXScaleStartBlank) { path2.moveTo(x, xLineStartY);//从第一个点底部开始画 path2.lineTo(x, y); } else { path2.lineTo(x, y); } } else { path1.lineTo(x, y); path2.lineTo(x, y); } if (isPointText) { paint.setStrokeWidth(1);//画笔宽度 paint.setColor(pointTextColor); paint.setTextSize(pointTextSize); paint.setStyle(Paint.Style.FILL);//填充风格 paint.setTextAlign(Paint.Align.CENTER);//标题文字居中对齐 //paint.setShadowLayer(2,3,3,Color.GRAY);//阴影 canvas.drawText(points.get(i).number + "", x, y - 10, paint);//显示文字 } if (isShowTextTag && tagIndex == i) { Rect rect = new Rect(); if (isShowValues) { mTagText = tagTextPrefix + points.get(i).number + tagTextSuffix; } else { mTagText = tagTextPrefix + tagTextSuffix; } paint.setTextSize(tagTextSize); paint.getTextBounds(mTagText, 0, mTagText.length(), rect);//取要写出的标签文本尺寸 rectF = new RectF(x - rect.width() / 2 - 8, y - 15 - rect.height() - 3, x + rect.width() / 2 + 8, y - 7); tagX = x; tagY = y; } /** * 绘制网格竖线 */ if (isYGrid) { paint.setStrokeWidth(gridLineWidth);//画笔宽度 paint.setColor(yGridLinearColor); if (isYGridDotted) { //如果绘制虚线 Path path = new Path(); path.moveTo(x, yLineStartY); path.lineTo(x, yLineStopY); PathEffect effects = new DashPathEffect(new float[]{4, 4, 4, 4}, 1); paint.setPathEffect(effects); canvas.drawPath(path, paint); paint.setPathEffect(null); } else { canvas.drawLine(x, yLineStartY, x, yLineStopY, paint);//绘制竖线 } } //绘制数值点图形 paint.setColor(pointColor);//数值点颜色 switch (pointStyle) { case 1: //默认方点 paint.setStrokeWidth(12); canvas.drawPoint(x, y, paint); break; case 2: //圆圈 paint.setStrokeWidth(2); paint.setStyle(Paint.Style.STROKE);//填充风格 canvas.drawCircle(x, y, 6, paint); break; case 3: //实心圆圈 paint.setStrokeWidth(2); paint.setStyle(Paint.Style.FILL);//填充风格 canvas.drawCircle(x, y, 6, paint); break; default: break; } } PathEffect effect = new CornerPathEffect(roundRadius);//路径连接效果 paint.setPathEffect(effect); if (!isXScaleStopBlank) { path2.lineTo(xLineStopX, xLineStopY + roundRadius);//将路径形成闭路 } else { path2.lineTo(x, xLineStopY + roundRadius);//将路径形成闭路 } /** * 绘制曲线填充图形内容 */ paint.setStrokeWidth(1); paint.setStyle(Paint.Style.FILL);//填充风格 if (mShader == null) { mShader = new LinearGradient(0, yLineStartY, 0, yLineHeight + yLineStartY , linearGradientColor1, linearGradientColor2, Shader.TileMode.REPEAT); } paint.setShader(mShader);//设置着色器 canvas.drawPath(path2, paint); paint.setShader(null);//清除着色器 /** * 绘制数值强调线 */ paint.setStrokeWidth(pathBoldLineWidth); paint.setColor(pathBoldColor);//颜色 //paint.setShadowLayer(6,3,3,Color.GRAY);//阴影 paint.setStyle(Paint.Style.STROKE);//填充风格 canvas.drawPath(path1, paint); //paint.setShadowLayer(0,0,0,Color.GRAY); } /** * 边框线 */ paint.setColor(frameLinearColor);//颜色 paint.setStyle(Paint.Style.STROKE);//填充风格 paint.setStrokeWidth(frameLineWidth);//画笔宽度 if (isYFrame) { canvas.drawLine(yLineStartX, yLineStartY, yLineStopX, yLineStopY, paint);//竖线 } if (isXFrame) { canvas.drawLine(xLineStartX, xLineStartY, xLineStopX, xLineStopY, paint);//横线 } /** * 文字部分 */ //绘制Y轴坐标点数值 if (isYScaleText) { paint.setTextAlign(Paint.Align.LEFT);//文字对齐 paint.setStrokeWidth(1); paint.setColor(yTextColor); paint.setStyle(Paint.Style.FILL);//填充风格 paint.setTextSize(yTextSize); int j = 0; while (j < yScaleNumber) { float x = xLineStartX + 5; float y = yLineStartY + yLineHeight / (yScaleNumber + 1) * (j + 1) - 5; float point = maxPoint - (maxPoint / (yScaleNumber + 1)) * (j + 1); canvas.drawText(numberToText(point, decimalDigits), x, y, paint); j++; } canvas.drawText(numberToText(maxPoint, decimalDigits) + "", xLineStartX + 5, yLineStartY - 5, paint);//顶部刻度 } //绘制X轴坐标点文字 if (isXScaleText) { paint.setColor(xTextColor); paint.setTextSize(xTextSize); paint.setStrokeWidth(1); paint.setStyle(Paint.Style.FILL);//填充风格 paint.setTextAlign(Paint.Align.CENTER);//标题文字居中对齐 if (points != null && points.size() > 0) {
int pNum = points.size();
for (int i = 0; i < points.size(); i++) { float x = xLineStartX + xLineWidth / (pNum - 1) * i; if (isXScaleStartBlank || isXScaleStopBlank) { if (isXScaleStartBlank && isXScaleStopBlank) { //如果首部留空并且结尾留空 x = xLineStartX + xLineWidth / (pNum + 1) * (i + 1); } else if (isXScaleStartBlank) { //如果首部留空 x = xLineStartX + xLineWidth / pNum * (i + 1); } else { //如果结尾留空 x = xLineStartX + xLineWidth / pNum * i; } } float y = yLineStopY + xTextSize + 5; canvas.drawText(points.get(i).pointTitle, x, y, paint); } } } //绘制标签 if (isShowTextTag && rectF != null && !mTagText.equals("")) { paint.setStrokeWidth(1);//画笔宽度 paint.setColor(tagBackColor); paint.setTextSize(tagTextSize); paint.setStyle(Paint.Style.FILL);//填充风格 paint.setTextAlign(Paint.Align.CENTER);//标题文字居中对齐 canvas.drawRoundRect(rectF, 5, 5, paint); paint.setColor(tagTextColor); canvas.drawText(mTagText, tagX, tagY - 15, paint); } } /** * 格式化小数位数并转换为字符串格式 * * @param n 要转换的数值 * @param decimalDigits 小数保留位数 * @return 返回格式化后的字符串 */ public String numberToText(float n, int decimalDigits) { BigDecimal b = new BigDecimal(n); return b.setScale(decimalDigits, BigDecimal.ROUND_HALF_UP).floatValue() + ""; } public static class GraphPoint { public float number = 0f; String pointTitle = ""; public GraphPoint(float number,String pointTitle) { super(); this.number = number; if(pointTitle!=null) { this.pointTitle = pointTitle; } } } }