12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223 |
- <?php
- namespace App\Http\Controllers\Api;
- use App\Models\OcrLog;
- use Illuminate\Http\Request;
- use App\Services\ToolsServices;
- class Ocr
- {
- static $mustExtractEntity = [
- [
- 'entity' => '白细胞',
- 'company' => ['10^9/L','10^9/l'],
- 'code' => 'wbc'
- ],
- [
- 'entity' => '中性粒细胞',
- 'company' => ['10^9/L','10^9/l'],
- 'code' => 'meut'
- ],
- [
- 'entity' => '中性粒细胞百分比',
- 'company' => ['10^9/L','10^9/l'],
- 'code' => 'meut%'
- ],
- [
- 'entity' => '淋巴细胞',
- 'company' => ['10^9/L','10^9/l'],
- 'code' => 'lymph'
- ],
- [
- 'entity' => '单核细胞',
- 'company' => ['10^9/L','10^9/l'],
- 'code' => 'monocytes'
- ],
- [
- 'entity' => '嗜酸粒细胞',
- 'company' => ['10^9/L','10^9/l'],
- 'code' => 'eos'
- ],
- [
- 'entity' => '嗜碱性粒细胞',
- 'company' => ['10^9/L','10^9/l'],
- 'code' => 'basophil'
- ],
- [
- 'entity' => '红细胞',
- 'company' => ['10^12/L','10^12/l'],
- 'code' => 'rbc'
- ],
- [
- 'entity' => '血红蛋白',
- 'company' => ['10^12/L','10^12/l'],
- 'code' => 'hgb'
- ],
- [
- 'entity' => '红细胞比容/红细胞压积',
- 'company' => ['L/L'],
- 'code' => '红细胞比容/红细胞压积'
- ],
- [
- 'entity' => '红细胞平均体积',
- 'company' => ['fL','fl'],
- 'code' => 'mcv'
- ],
- [
- 'entity' => '平均血红蛋白含量',
- 'company' => ['g/L','g/l'],
- 'code' => 'mch'
- ],
- [
- 'entity' => '平均血红蛋白浓度',
- 'company' => ['g/L','g/l'],
- 'code' => 'mchc'
- ],
- [
- 'entity' => '红细胞分布宽度变异系数',
- 'company' => ['%'],
- 'code' => '红细胞分布宽度变异系数'
- ],
- [
- 'entity' => '红细胞分布宽度标准差',
- 'company' => ['fL','fl'],
- 'code' => '红细胞分布宽度标准差'
- ],
- [
- 'entity' => '血小板',
- 'company' => ['10^9/L','10^9/l'],
- 'code' => 'plt'
- ],
- [
- 'entity' => '平均血小板体积',
- 'company' => ['fL','fl'],
- 'code' => 'mpv'
- ],
- [
- 'entity' => '血小板体积分布宽度',
- 'company' => ['fL','fl'],
- 'code' => 'pdw'
- ],
- [
- 'entity' => '血小板压积',
- 'company' => ['%'],
- 'code' => 'pct'
- ],
- [
- 'entity' => '丙氨酸转氨酶(谷丙)',
- 'company' => ['U/L'],
- 'code' => 'alt'
- ],
- [
- 'entity' => '天门冬氨酸氨基转移酶',
- 'company' => ['U/L'],
- 'code' => 'ast'
- ],
- [
- 'entity' => '碱性磷酸酶',
- 'company' => ['U/L'],
- 'code' => 'alp'
- ],
- [
- 'entity' => 'γ-谷氨酰基转移酶',
- 'company' => ['U/L'],
- 'code' => 'ggt'
- ],
- [
- 'entity' => '胆碱酯酶',
- 'company' => ['U/L'],
- 'code' => 'che'
- ],
- [
- 'entity' => '总蛋白',
- 'company' => ['g/L','g/l'],
- 'code' => 'tp'
- ],
- [
- 'entity' => '白蛋白',
- 'company' => ['g/L','g/l'],
- 'code' => 'alb'
- ],
- [
- 'entity' => '球蛋白',
- 'company' => ['g/L','g/l'],
- 'code' => 'glb'
- ],
- [
- 'entity' => '白/球蛋白比值',
- 'company' => ['%'],
- 'code' => 'a:g'
- ],
- [
- 'entity' => '总胆红素',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'tbil'
- ],
- [
- 'entity' => '直接胆红素',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'dbil'
- ],
- [
- 'entity' => '间接胆红素',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'ibil'
- ],
- [
- 'entity' => '岩藻糖苷酶',
- 'company' => ['umol/L','umol/l'],
- 'code' => '岩藻糖苷酶'
- ],
- [
- 'entity' => '尿素',
- 'company' => ['umol/L','umol/l'],
- 'code' => '尿素'
- ],
- [
- 'entity' => '尿酸',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'uric'
- ],
- [
- 'entity' => '肌酐',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'crea'
- ],
- [
- 'entity' => '葡萄糖',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'glu'
- ],
- [
- 'entity' => '总胆固醇',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'chol'
- ],
- [
- 'entity' => '甘油三酯',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'tg'
- ],
- [
- 'entity' => '高密度脂蛋白',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'hdl'
- ],
- [
- 'entity' => '低密度脂蛋白',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'ldl'
- ],
- [
- 'entity' => '小而密低密度脂蛋白',
- 'company' => ['umol/L','umol/l'],
- 'code' => 'sdldl'
- ],
- [
- 'entity' => '载脂蛋白A1',
- 'company' => ['g/L','g/l'],
- 'code' => 'apoa1'
- ],
- [
- 'entity' => '载脂蛋白B',
- 'company' => ['g/L','g/l'],
- 'code' => 'apob'
- ],
- [
- 'entity' => '肌酸激酶',
- 'company' => ['U/L'],
- 'code' => 'ck'
- ],
- [
- 'entity' => '肌酸激酶同工酶',
- 'company' => ['U/L'],
- 'code' => 'ckmb'
- ],
- [
- 'entity' => 'α羟基丁酸脱氢酶',
- 'company' => ['U/L'],
- 'code' => 'α羟基丁酸脱氢酶'
- ],
- [
- 'entity' => '乳酸脱氢酶',
- 'company' => ['U/L'],
- 'code' => 'ldh'
- ],
- [
- 'entity' => '同型半胱氨酸',
- 'company' => ['μmol/L','μmol/l'],
- 'code' => 'hcy'
- ],
- [
- 'entity' => '钙',
- 'company' => ['mmol/L','mmol/l'],
- 'code' => 'ca'
- ],
- [
- 'entity' => '钾',
- 'company' => ['mmol/L','mmol/l'],
- 'code' => 'k'
- ],
- [
- 'entity' => '钠',
- 'company' => ['mmol/L','mmol/l'],
- 'code' => 'na'
- ],
- [
- 'entity' => '氯',
- 'company' => ['mmol/L','mmol/l'],
- 'code' => 'c1'
- ],
- [
- 'entity' => '铁',
- 'company' => ['mmol/L','mmol/l'],
- 'code' => 'fe'
- ],
- [
- 'entity' => '镁',
- 'company' => ['mmol/L','mmol/l'],
- 'code' => 'mg'
- ],
- [
- 'entity' => '总胆汁酸',
- 'company' => ['μmol/L','μmol/l','umol/l','umol/L'],
- 'code' => 'tba'
- ],
- [
- 'entity' => '超敏C反应蛋白',
- 'company' => ['mg/L'],
- 'code' => '超敏C反应蛋白'
- ],
- ];
- public function ocr(Request $request)
- {
- $file = $request->file('file');
- if ($file->getSize() > (4 * 1024 * 1024)) {
- return ToolsServices::error('文件大小超过限制');
- }
- // $rtn = self::run($file->getRealPath());
- // $content = json_decode($rtn, true);
- // dd($content);
- $rtn = self::callOcr($file);
- $word = self::formatTestSheet($rtn);
- $file = $file->store('image');
- // $content = json_decode($rtn, true);
- // $items = $content['words_result'];
- $result = [];
- $serCodes = [];
- foreach ($word as $key => $val) {
- //0参考区间
- //1单位
- //2参考区间
- //4 结果
- //6代号
- //7名称
- if (stripos($val['range'], '--') !== false) {
- $fanwei = explode('--', $val['range']);
- } else {
- $fanwei = explode('-', $val['range']);
- }
- if (!isset($fanwei[1]) || in_array($val['entity'], ['超敏肌钙蛋白I'])) {
- continue;
- }
- if (stripos($val['entity'], ')') !== false) {
- preg_match('/\((.*?)\)/', $val['entity'], $matches);
- if (!isset($matches[1])) {
- continue;
- }
- $val['code'] = $matches[1];
- }
- if (!empty($val['value']) && !empty($val['entity']) && empty($val['code'])) {
- $val['code'] = $this->getCode($val['entity'], $serCodes);
- $serCodes[] = $val['code'];
- }
- $fanwei = $this->fanwei($val['code'], $val['entity'], $val['value'], $fanwei);
- if (empty($fanwei)) {
- continue;
- }
- $result[] = $fanwei;
- }
- $qingxu = self::jisuan($result);
- $absQx = [];
- if (empty($qingxu)) {
- return ToolsServices::success([]);
- }
- foreach ($qingxu as $qxK => $qxV) {
- $absQx[$qxK] = abs($qxV);
- }
- arsort($absQx);
- $maxValues = array_slice($absQx, 0, 2);
- $sortData = [];
- foreach ($maxValues as $keys => $vals) {
- $sortData[] = [$keys, $vals];
- }
- if (count($sortData) == 2) {
- $one = $sortData[0];
- $two = $sortData[1];
- if ($one[1] > $two[1]) {
- $data[] = $sortData[0];
- } elseif ($one[1] == $two[1]) {
- $data = $sortData;
- } else {
- $data[] = $sortData[1];
- }
- } else {
- $data = $sortData;
- }
- $insert = [
- 'image'=>json_encode([$file]),
- 'ocr' => '1111',
- 'result' => json_encode($data)
- ];
- OcrLog::insertData($insert);
- return ToolsServices::success($data);
- }
- public function fanwei($xmdm, $name, $jieguo, $fanwei)
- {
- $fanwei[0] = (float)$fanwei[0];
- $fanwei[1] = (float)$fanwei[1];
- $average = ($fanwei[1] - $fanwei[0]) / 5;
- $averageArr = [];
- $levels = [3, 2, 1, 0, -1, -2, -3];
- $averageArr[0] = ['max' => $fanwei[1], 'level' => 3];
- for ($i = 1; $i <= 5; $i++) {
- if ($i == 1) {
- $max = $fanwei[1];
- $min = number_format($fanwei[1] - $average * $i, 1);
- } else {
- $max = number_format($fanwei[1] - $average * ($i - 1), 1);
- $min = number_format($fanwei[1] - $average * $i, 1);
- }
- $averageArr[$i] = ['max' => $max, 'min' => $min, 'level' => $levels[$i]];
- }
- array_push($averageArr, ['max' => $fanwei[0], 'level' => -3]);
- $rangeArr = [
- //1. 身体元素
- //铁
- 'fe' => ['3' => ['焦虑(中)'], '2' => ['焦虑(中)'], '1' => ['焦虑(轻)'], '-1' => ['抑郁(轻)', '愤怒(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //钙
- 'ca' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)', '愤怒(轻)'], '-2' => ['焦虑(中)', '易激惹(中)'], '-3' => ['焦虑(中)', '易激惹(中)']],
- //镁
- 'mg' => ['-2' => ['焦虑(中)', '易怒(中)', '抑郁(中)'], '-3' => ['焦虑(中)', '易怒(中)', '抑郁(中)']],
- //钾
- 'k' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //钠
- 'na' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //氯
- 'c1' => ['3' => ['愤怒(中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['抑郁(轻)', '焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
- //2. 心肝肾代谢
- //丙氨酸转氨酶(谷丙)
- 'alt' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
- //天门冬氨酸氨基转移酶(谷草)
- 'ast' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
- //碱性磷酸酶
- 'alp' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
- //γ-谷氨酰基转移酶
- 'ggt' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
- //胆碱酯酶
- 'che' => ['3' => ['愤怒)中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
- //3. 胆功代谢
- //总胆红素
- 'tbil' => ['3' => ['愤怒(中)', '抑郁(中)'], '2' => ['愤怒(中)', '抑郁(中)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //直接胆红素
- 'dbil' => ['3' => ['愤怒(中)', '抑郁(中)', '焦虑)中)'], '2' => ['愤怒(中)', '抑郁(中)', '焦虑(中)'], '1' => ['愤怒)轻)', '抑郁(轻)', '焦虑)轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)']],
- //间接胆红素
- 'ibil' => ['3' => ['抑郁(中)', '焦虑)中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //4. 糖、脂肪、蛋白质代谢
- //同型半胱氨酸
- 'hcy' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //葡萄糖
- 'glu' => ['3' => ['愤怒(中)', '抑郁(中)', '焦虑(中)'], '2' => ['恐惧(中)', '委屈(轻)', '抑郁(轻)', '焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //总胆汁酸
- 'tba' => ['3' => ['焦虑(中)'], '2' => ['焦虑(中)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '愤怒(中)'], '-3' => ['抑郁(中)', '愤怒(中)']],
- //甘油三酯
- 'tg' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)'], '-2' => ['抑郁(中)']],
- //总胆固醇
- 'chol' => ['3' => ['愤怒(中)', '抑郁(中)', '焦虑(中)', '恐惧(中)'], '2' => ['愤怒(中)', '抑郁(中)', '焦虑(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '抑郁(轻)', '焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['焦虑(中)', '抑郁(中)'], '-3' => ['焦虑(中)', '抑郁(中)']],
- //高密度脂蛋白
- 'hdl' => ['3' => ['愤怒(中)', '焦虑(中)'], '2' => ['愤怒(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['愤怒(轻)', '焦虑(轻)'], '-2' => ['愤怒(中)', '焦虑(中)'], '-3' => ['愤怒(中)', '焦虑(中)']],
- //低密度脂蛋白
- 'ldl' => ['3' => ['抑郁(中)', '焦虑(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['愤怒(轻)', '焦虑(轻)'], '-2' => ['愤怒(中)', '焦虑(中)'], '-3' => ['愤怒(中)', '焦虑(中)']],
- //小而密低密度脂蛋白
- 'sdldl' => ['3' => ['抑郁(中)', '焦虑(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['愤怒(轻)', '焦虑(轻)'], '-2' => ['愤怒(中)', '焦虑(中)'], '-3' => ['愤怒(中)', '焦虑(中)']],
- //载脂蛋白A1
- 'apoa1' => ['3' => ['抑郁(中)', '焦虑(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['抑郁(轻)', '焦虑(轻)'], '-1' => ['愤怒(轻)', '焦虑(轻)'], '-2' => ['愤怒(中)', '焦虑(中)'], '-3' => ['愤怒(中)', '焦虑(中)']],
- //载脂蛋白B
- 'apob' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)']],
- //尿酸
- 'uric' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['焦虑(中)', '恐惧(中)'], '1' => ['焦虑(轻)']],
- // '尿素' => [],
- //5. 免疫
- //总蛋白
- 'tp' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
- //白蛋白
- 'alb' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
- //球蛋白
- 'glb' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
- //白(中)球蛋白比值
- 'a:g' => ['3' => ['愤怒(中)', '易怒(中)'], '2' => ['愤怒(中)', '易怒(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(中)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //6. 肌肉代谢
- //肌酐
- 'crea' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
- //肌酸激酶
- 'ck' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['焦虑(中)', '恐惧(中)'], '-3' => ['焦虑(中)', '恐惧(中)']],
- //肌酸激酶同工酶
- 'ckmb' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //乳酸脱氢酶
- 'ldh' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //7. 血常规免疫
- //白细胞
- 'wbc' => ['3' => ['抑郁(中)', '恐惧(中)'], '2' => ['抑郁(中)', '恐惧(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //中性粒细胞
- 'meut' => ['3' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['愤怒(轻)', '焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
- 'meut%' => ['3' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['愤怒(轻)', '焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
- //淋巴细胞
- 'lymph' => ['3' => ['焦虑(中)', '愤怒(中)'], '2' => ['焦虑(中)', '愤怒(中)'], '1' => ['焦虑(轻)', '愤怒(轻)'], '-1' => ['愤怒(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //单核细胞
- 'monocytes' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //嗜酸粒细胞
- 'eos' => ['3' => ['焦虑(中)', '恐惧(中)'], '2' => ['恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)']], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)'],
- //嗜碱性粒细胞
- 'basophil' => ['3' => ['愤怒(中)', '焦虑(中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)']],
- //8. 贫血
- //红细胞
- 'rbc' => ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '-1' => ['抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //血红蛋白
- 'hgb' => ['3' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['愤怒(轻)', '焦虑(轻)'], '-1' => ['抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- '红细胞比容/红细胞压积' => ['3' => ['愤怒(中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)'], '1' => ['愤怒(轻)', '焦虑(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //红细胞平均体积
- 'mcv' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
- //平均血红蛋白含量
- 'mch' => ['3' => ['抑郁(中)'], '2' => ['抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)']],
- //平均血红蛋白浓度
- 'mchc' => ['3' => ['愤怒(中)', '恐惧(中)'], '2' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)', '抑郁(轻)']], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)', '焦虑(中)'],
- //红细胞分布宽度
- 'rdw-cv' => ['3' => ['抑郁(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
- //血小板
- 'plt' => ['3' => ['焦虑(中)', '愤怒(中)', '抑郁(中)'], '2' => ['抑郁(中)'], '1' => ['焦虑(轻)', '愤怒(轻)'], '-1' => ['愤怒(轻)', '抑郁(轻)'], '-2' => ['抑郁(中)'], '-3' => ['抑郁(中)']],
- //平均血小板体积
- 'mpv' => ['3' => ['焦虑(中)', '抑郁(中)'], '2' => ['焦虑(中)', '抑郁(中)'], '1' => ['焦虑(轻)', '抑郁(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
- //血小板体积分布宽度
- 'pdw' => ['3' => ['抑郁(中)'], '2' => ['抑郁(中)'], '1' => ['焦虑(轻)', '恐惧(轻)']],
- //血小板压积
- 'pct' => ['3' => ['抑郁(中)'], '2' => ['抑郁(中)', '焦虑(中)'], '1' => ['焦虑(轻)', '恐惧(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']],
- ];
- $reslut = [];
- $xmdm = strtolower($xmdm);
- if (!isset($rangeArr[$xmdm])) {
- return $reslut;
- }
- $ra = $rangeArr[$xmdm];
- //范围
- foreach ($averageArr as $akey => $aval) {
- if ($jieguo > $averageArr[0]['max']) {
- if (!isset($ra[$averageArr[0]['level']])) {
- break;
- }
- $reslut[$xmdm] = ['name' => $name] + ['status' => $ra[$averageArr[0]['level']]] + ['level' => 3] + ['result' => $jieguo] + ['reference' => $fanwei[1] . '-' . $fanwei[0]] + ['range' => json_encode($averageArr)];
- break;
- } elseif (isset($aval['min']) && $jieguo > $aval['min'] && $jieguo < $aval['max']) {
- if (!isset($ra[$aval['level']])) {
- break;
- }
- $reslut[$xmdm] = ['name' => $name] + ['status' => $ra[$aval['level']]] + ['level' => $aval['level']] + ['result' => $jieguo] + ['reference' => $fanwei[1] . '-' . $fanwei[0]] + ['range' => json_encode($averageArr)];
- break;
- } elseif ($jieguo < $averageArr[6]['max']) {
- if (!isset($ra[$averageArr[6]['level']])) {
- break;
- }
- $reslut[$xmdm] = ['name' => $name] + ['status' => $ra[$averageArr[6]['level']]] + ['level' => -3] + ['result' => $jieguo] + ['reference' => $fanwei[1] . '-' . $fanwei[0]] + ['range' => json_encode($averageArr)];
- break;
- }
- }
- return $reslut;
- }
- public static function jisuan($data)
- {
- //身体元素 钾钠氯铁钙镁
- $shenti = ['k', 'na', 'c1', 'fe', 'ca', 'mg'];
- // $fe = ['-2' => -2 * 99, '-3' => -3 * 99];
- // $na = ['-3' => -3 * 99];
- $re = [];
- $xiangmuArr = [];
- $shentiRes = [];
- foreach ($data as $key => $item) {
- foreach ($item as $dm => $val) {
- if (in_array($dm, $shenti)) {
- if ($dm == 'fe') {
- if ($val['level'] == -2) {
- $val['level'] = -2 * 99;
- }
- if ($val['level'] == -3) {
- $val['level'] = -3 * 99;
- }
- }
- if ($dm == 'na') {
- if ($val['level'] == -3) {
- $val['level'] = -3 * 99;
- }
- }
- //var_dump($val['status'], $dm);
- foreach ($val['status'] as $sts) {
- if (!isset($shentiRes[$sts])) {
- $shentiRes[$sts] = $val['level'];
- } else {
- $shentiRes[$sts] += $val['level'];
- }
- }
- }
- $xiangmuArr[$dm] = $val;
- }
- }
- $re['shenti'] = $shentiRes;
- //【肝】 γ-谷氨酰基转移酶 --ggt
- $ganVal = [];
- $gxsRes = [];
- if (isset($xiangmuArr['ggt'])) {
- $ganFanWeiArr = ['3' => ['愤怒(中)'], '2' => ['愤怒(中)'], '1' => ['愤怒(轻)'], '-1' => ['焦虑(轻)'], '-2' => ['抑郁(中)', '焦虑(中)'], '-3' => ['抑郁(中)']];
- if (isset($ganFanWeiArr[$xiangmuArr['ggt']['level']])) {
- $ganVal = ['status' => $ganFanWeiArr[$xiangmuArr['ggt']['level']], 'val' => $xiangmuArr['ggt']['level']];
- foreach ($ganFanWeiArr[$xiangmuArr['ggt']['level']] as $gan) {
- if (!isset($gxsRes[$gan])) {
- $gxsRes[$gan] = $xiangmuArr['ggt']['level'];
- } else {
- $gxsRes[$gan] += $xiangmuArr['ggt']['level'];
- }
- }
- }
- }
- //【心】[丙氨基转移酶alt]*2-[γ-谷氨酰基转移酶ggt]=[心]
- $xinVal = [];
- if (isset($xiangmuArr['alt']) && isset($xiangmuArr['ggt'])) {
- $xinDiff = $xiangmuArr['alt']['level'] * 2 - $xiangmuArr['ggt']['level'] * 1;
- $xinFanWeiArr = ['6~9' => ['愤怒(中)', '恐惧(中)'], '3~5' => ['愤怒(中)', '恐惧(中)'], '1~2' => ['愤怒(轻)', '恐惧(轻)', '焦虑(轻)'], '-2~-1' => ['焦虑(轻)'], '-5~-3' => ['抑郁(中)', '焦虑(中)'], '-9~-6' => ['抑郁(中)']];
- foreach ($xinFanWeiArr as $xinKey => $xStatus) {
- $xnum = explode('~', $xinKey);
- if ($xinDiff > $xnum[0] && $xinDiff < $xnum[1]) {
- $xinVal = ['status' => $xStatus, 'val' => $xinDiff];
- foreach ($xStatus as $xin) {
- if (!isset($gxsRes[$xin])) {
- $gxsRes[$xin] = $xinDiff;
- } else {
- $gxsRes[$xin] += $xinDiff;
- }
- }
- }
- }
- }
- //【肾】[丙氨基转移酶]*3-[天门冬氨酸氨基转移酶]*2 --ast
- $shenVal = [];
- if (isset($xiangmuArr['alt']) && isset($xiangmuArr['ast'])) {
- $shenDiff = $xiangmuArr['alt']['level'] * 3 - $xiangmuArr['ast']['level'] * 1;
- $shenFanWeiArr = ['10~15' => ['愤怒(中)', '恐惧(中)'], '5~9' => ['愤怒(中)', '恐惧(中)', '焦虑(中)'], '1~4' => ['焦虑(轻)'], '-4~-1' => ['焦虑(轻)'], '-9~-5' => ['抑郁(中)', '焦虑(中)'], '-15~-10' => ['抑郁(中)', '焦虑(中)']];
- foreach ($shenFanWeiArr as $senKey => $senStatus) {
- $sennum = explode('~', $senKey);
- if ($shenDiff > $sennum[0] && $shenDiff < $sennum[1]) {
- $shenVal = ['status' => $senStatus, 'val' => $shenDiff];
- foreach ($senStatus as $sen) {
- if (!isset($gxsRes[$sen])) {
- $gxsRes[$sen] = $shenDiff;
- } else {
- $gxsRes[$sen] += $shenDiff;
- }
- }
- }
- }
- }
- //var_dump($ganVal,$xinVal,$shenVal);
- $re['xgs'] = $gxsRes;
- //3. 胆功代谢
- $zjdhs = [];//直接、间接胆红素
- $dhsjl = [];//胆红素结论
- if (isset($xiangmuArr['dbil']) && isset($xiangmuArr['ibil'])) {
- $dbilArr = [];
- $ibilArr = [];
- $dbVal = 0;
- $ibVal = 0;
- foreach ($xiangmuArr['dbil']['status'] as $dbil) {
- $dbVal += $xiangmuArr['dbil']['level'];
- if (isset($dbilArr[$dbil])) {
- $dbilArr[$dbil] += $xiangmuArr['dbil']['level'];
- } else {
- $dbilArr[$dbil] = $xiangmuArr['dbil']['level'];
- }
- }
- foreach ($xiangmuArr['ibil']['status'] as $ibil) {
- $ibVal += $xiangmuArr['ibil']['level'];
- if (isset($ibilArr[$ibil])) {
- $ibilArr[$ibil] += $xiangmuArr['ibil']['level'];
- } else {
- $ibilArr[$ibil] = $xiangmuArr['ibil']['level'];
- }
- }
- if (abs($dbVal) > abs($ibVal)) {
- $zjdhs = $dbilArr;
- } else {
- $zjdhs = $ibilArr;
- }
- //$re['dan'] = ['0' => $zjdhs];
- }
- if (isset($xiangmuArr['tbil']) && !empty($zjdhs)) {
- foreach ($xiangmuArr['tbil']['status'] as $tbil) {
- if (isset($dhsjl[$tbil])) {
- $dhsjl[$tbil] += $xiangmuArr['tbil']['level'];
- } else {
- $dhsjl[$tbil] = $xiangmuArr['tbil']['level'];
- }
- }
- foreach ($zjdhs as $zjdhKey => $zjdhVal) {
- if (isset($dhsjl[$zjdhKey])) {
- $dhsjl[$zjdhKey] += $zjdhVal;
- } else {
- $dhsjl[$zjdhKey] = $zjdhVal;
- }
- }
- }
- $re['dan'] = $dhsjl;
- //4. 糖、脂肪、蛋白质代谢
- //[同型半胱氨酸]+[葡萄糖]+[总胆汁酸]+[甘油三酯]+[总胆固醇]+[高密度脂蛋白]+[低密度脂蛋白]+[小而密低密度脂蛋白]+[载脂蛋白A1]+[载脂蛋白bB]+[尿酸]
- $dxie = ['hcy', 'glu', 'tba', 'tg', 'chol', 'hdl', 'hdl', 'ldl', 'sdldl', 'uric'];
- $dxieRes = [];
- foreach ($data as $key => $item) {
- foreach ($item as $dm => $val) {
- if (in_array($dm, $dxie)) {
- foreach ($val['status'] as $sts) {
- if (!isset($dxieRes[$sts])) {
- $dxieRes[$sts] = $val['level'];
- } else {
- $dxieRes[$sts] += $val['level'];
- }
- }
- }
- }
- }
- $re['daixie'] = $dxieRes;
- //5. 免疫
- //[总蛋白tp]+[白蛋白alb]+[球蛋白glb]+[白(中)][球蛋白比值a:g]
- $mianyiRes = [];
- $baiQiuArr = [];
- $qiuDanBaiArr = [];
- $qiuMaxArr = [];
- $albVal = 0;
- $glbVal = 0;
- if (isset($xiangmuArr['alb']) && isset($xiangmuArr['glb'])) {
- foreach ($xiangmuArr['alb']['status'] as $sts) {
- $albVal += $xiangmuArr['alb']['level'];
- if (isset($baiQiuArr[$sts])) {
- $baiQiuArr[$sts] += $xiangmuArr['alb']['level'];
- } else {
- $baiQiuArr[$sts] = $xiangmuArr['alb']['level'];
- }
- }
- foreach ($xiangmuArr['glb']['status'] as $sts) {
- $glbVal += $xiangmuArr['glb']['level'];
- if (isset($qiuDanBaiArr[$sts])) {
- $qiuDanBaiArr[$sts] += $xiangmuArr['glb']['level'];
- } else {
- $qiuDanBaiArr[$sts] = $xiangmuArr['glb']['level'];
- }
- }
- if (abs($albVal) > abs($glbVal)) {
- $qiuMaxArr = $baiQiuArr;
- } else {
- $qiuMaxArr = $qiuDanBaiArr;
- }
- }
- if (isset($xiangmuArr['tp']) && isset($xiangmuArr['a:g']) && !empty($biZhiArr)) {
- foreach ($xiangmuArr['tp']['status'] as $tpSts) {
- if (isset($mianyiRes[$tpSts])) {
- $mianyiRes[$tpSts] += $xiangmuArr['tp']['level'];
- } else {
- $mianyiRes[$tpSts] = $xiangmuArr['tp']['level'];
- }
- }
- foreach ($xiangmuArr['a:g']['status'] as $agSts) {
- if (isset($mianyiRes[$agSts])) {
- $mianyiRes[$agSts] += $xiangmuArr['a:g']['level'];
- } else {
- $mianyiRes[$agSts] = $xiangmuArr['a:g']['level'];
- }
- }
- foreach ($qiuMaxArr as $maxKey => $maxVal) {
- if (isset($mianyiRes[$maxKey])) {
- $mianyiRes[$maxKey] += $maxVal;
- } else {
- $mianyiRes[$maxKey] = $maxVal;
- }
- }
- }
- $re['mianyi'] = $mianyiRes;
- //6. 肌肉代谢
- //[肌酐][肌酸激酶][肌酸激酶同工酶][乳酸脱氢酶]
- $jirouDxie = ['crea', 'ckmb', 'ckmb', 'ldh'];
- $jrdxieRes = [];
- foreach ($data as $key => $item) {
- foreach ($item as $dm => $val) {
- if (in_array($dm, $jirouDxie)) {
- foreach ($val['status'] as $sts) {
- if (!isset($jrdxieRes[$sts])) {
- $jrdxieRes[$sts] = $val['level'];
- } else {
- $jrdxieRes[$sts] += $val['level'];
- }
- }
- }
- }
- }
- $re['jiroudx'] = $jrdxieRes;
- //7. 血常规免疫
- //[白细胞][中性粒细胞][中性粒细胞百分比][淋巴细胞][单核细胞][嗜酸粒细胞][嗜碱性粒细胞]
- $xue = ['wbc', 'meut', 'lymph', 'lymph', 'monocytes', 'eos', 'basophil'];
- $xueRes = [];
- foreach ($data as $key => $item) {
- foreach ($item as $dm => $val) {
- if (in_array($dm, $xue)) {
- foreach ($val['status'] as $sts) {
- if (!isset($xueRes[$sts])) {
- $xueRes[$sts] = $val['level'];
- } else {
- $xueRes[$sts] += $val['level'];
- }
- }
- }
- }
- }
- $re['xue'] = $xueRes;
- //8. 贫血
- //[红细胞][血红蛋白][红细胞比容/红细胞压积][红细胞平均体积][平均血红蛋白含量][平均血红蛋白浓度][红细胞分布宽度][血小板][平均血小板体积][血小板体积分布宽度][血小板压积]
- $pinXue = ['rbc', 'hgb', 'mcv', 'mch', 'mchc', 'rdw-cv', 'plt', 'mpv', 'pdw'];
- $pinXueRes = [];
- $pinXlevel = [
- 'rbc' => ['-2' => -198, '-3' => 287],
- 'hgb' => ['-2' => -198, '-3' => 287],
- 'mcv' => ['-2' => -198, '-3' => -287],
- 'rdw-cv' => ['-1' => -99, '-3' => -287],
- ];
- foreach ($data as $key => $item) {
- foreach ($item as $dm => $val) {
- if (in_array($dm, $pinXue)) {
- if (isset($pinXlevel[$dm][$val['level']])) {
- $level = $pinXlevel[$dm][$val['level']];
- } else {
- $level = $val['level'];
- }
- foreach ($val['status'] as $sts) {
- if (!isset($pinXueRes[$sts])) {
- $pinXueRes[$sts] = $level;
- } else {
- $pinXueRes[$sts] += $level;
- }
- }
- }
- }
- }
- $re['pinxue'] = $pinXueRes;
- $jieguo = [];
- foreach ($re as $rr) {
- if (!empty($rr)) {
- foreach ($rr as $st => $stVal) {
- if (isset($jieguo[$st])) {
- $jieguo[$st] += $stVal;
- } else {
- $jieguo[$st] = $stVal;
- }
- }
- }
- }
- return $jieguo;
- }
- public function getCode($name, $check)
- {
- $code = [
- 'fe' => '铁',
- //钙
- 'ca' => '钙',
- //镁
- 'mg' => '镁',
- //钾
- 'k' => '钾',
- //钠
- 'na' => '钠',
- //氯
- 'c1' => '氯',
- //2. 心肝肾代谢
- //丙氨酸转氨酶(谷丙)
- 'alt' => '丙氨酸转氨酶',
- //天门冬氨酸氨基转移酶(谷草)
- 'ast' => '天门冬氨酸氨基转移酶',
- //碱性磷酸酶
- 'alp' => '碱性磷酸酶',
- //γ-谷氨酰基转移酶
- 'ggt' => 'γ-谷氨酰基转移酶',
- //胆碱酯酶
- 'che' => '胆碱酯酶',
- //3. 胆功代谢
- //总胆红素
- 'tbil' => '总胆红素',
- //直接胆红素
- 'dbil' => '直接胆红素',
- //间接胆红素
- 'ibil' => '间接胆红素',
- //4. 糖、脂肪、蛋白质代谢
- //同型半胱氨酸
- 'hcy' => '同型半胱氨酸',
- //葡萄糖
- 'glu' => '葡萄糖',
- //总胆汁酸
- 'tba' => '总胆汁酸',
- //甘油三酯
- 'tg' => '甘油三酯',
- //总胆固醇
- 'chol' => '总胆固醇',
- //高密度脂蛋白
- 'hdl' => '高密度脂蛋白',
- //低密度脂蛋白
- 'ldl' => '低密度脂蛋白',
- //小而密低密度脂蛋白
- 'sdldl' => '小而密低密度脂蛋白',
- 'apoa1' => '载脂蛋白A1',
- 'apob' => '载脂蛋白B',
- //尿酸
- 'uric' => '尿酸',
- // '尿素' => [],
- //5. 免疫
- //总蛋白
- 'tp' => '总蛋白',
- //白蛋白
- 'alb' => '白蛋白',
- //球蛋白
- 'glb' => '球蛋白',
- //白(中)球蛋白比值
- 'a:g' => '白(中)球蛋白比值',
- //6. 肌肉代谢
- //肌酐
- 'crea' => '肌酐',
- //肌酸激酶
- 'ck' => '肌酸激酶',
- //肌酸激酶同工酶
- 'ckmb' => '肌酸激酶同工酶',
- //乳酸脱氢酶
- 'ldh' => '乳酸脱氢酶',
- //7. 血常规免疫
- //白细胞
- 'wbc' => '白细胞',
- //中性粒细胞
- 'meut' => '中性粒细胞',
- 'meut%' => '中性粒细胞百分比',
- //淋巴细胞
- 'lymph' => '淋巴细胞',
- 'monocytes' => '单核细胞',
- 'eos' => '嗜酸粒细胞',
- 'basophil' => '嗜碱性粒细胞',
- //8. 贫血
- //红细胞
- 'rbc' => '红细胞',
- //血红蛋白
- 'hgb' => '血红蛋白',
- '红细胞比容/红细胞压积' => '红细胞比容/红细胞压积',
- //红细胞平均体积
- 'mcv' => '红细胞平均体积',
- //平均血红蛋白含量
- 'mch' => '平均血红蛋白含量',
- //平均血红蛋白浓度
- 'mchc' => '平均血红蛋白浓度',
- //红细胞分布宽度
- 'rdw-cv' => '红细胞分布宽度',
- //血小板
- 'plt' => '血小板',
- //平均血小板体积
- 'mpv' => '平均血小板体积',
- //血小板体积分布宽度
- 'pdw' => '血小板体积分布宽度',
- 'pct' => '血小板压积',
- ];
- foreach ($code as $k => $v) {
- if (stripos($name, $v) !== false && !in_array($k, $check)) {
- return $k;
- }
- }
- }
- public static function callOcr($file){
- $appId = 'd33412c0';
- $apiKey = '5289860fd8cda40a979823dfb641610f';
- $apiSecret = 'YmIxZTEyYzcwZmEzZjMzMDg5NzZkZGUz';
- $url = 'https://api.xf-yun.com/v1/private/sf8e6aca1';
- $date = gmstrftime("%a, %d %b %Y %T %Z",time());
- $host = 'api.xf-yun.com';
- $signature = "host: api.xf-yun.com\ndate: $date\nPOST /v1/private/sf8e6aca1 HTTP/1.1";
- $signature = hash_hmac('sha256',$signature,$apiSecret,true);
- $signature = base64_encode($signature);
- $authorization = 'api_key="'.$apiKey.'",algorithm="hmac-sha256",headers="host date request-line",signature="'.$signature.'"';
- $authorization = base64_encode($authorization);
- $url = $url .'?authorization='.$authorization.'&host='.$host.'&date='.urlencode($date);
- $image = base64_encode(file_get_contents($file->getRealPath()));
- $data = [
- "header" => [
- "app_id"=> $appId,
- "status"=> 3
- ],
- 'parameter' => [
- 'sf8e6aca1' => [
- 'category' => 'ch_en_public_cloud',
- 'result' => [
- 'encoding' => 'utf8',
- 'compress' => 'raw',
- 'format' => 'json'
- ]
- ]
- ],
- 'payload' => [
- 'sf8e6aca1_data_1' => [
- 'encoding' => $file->getClientOriginalExtension(),
- 'status' => 3,
- 'image' => $image
- ]
- ]
- ];
- $strlen = strlen($image);
- if (strlen(base64_encode(file_get_contents($file->getRealPath()))) > 10485760){
- return '';
- }
- $data = json_encode($data);
- $result = self::sendPost($url,$data);
- if ($result['header']['code'] == 0){
- return $result['payload']['result']['text'];
- }else{
- return '';
- }
- }
- public static function sendPost($url,$data){
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
- curl_setopt($ch, CURLOPT_HEADER, false);
- curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','host: api.xf-yun.com', 'app_id: 645ee768'));
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
- $output = curl_exec($ch);
- curl_close($ch);
- $output = json_decode($output,true);
- return $output;
- }
- public static function formatTestSheet($text){
- $text = str_replace(
- [" ","\n","★","*"],
- ['','','',''],
- base64_decode($text));
- $text = json_decode($text,true);
- $wordArray = array_column($text['pages'][0]['lines'],'words');
- foreach ($wordArray as $item){
- $word[] = $item[0];
- }
- $word = array_values(array_filter(array_column($word,'content')));
- $data = [];
- $count = count($word);
- for ($i = 0 ; $i < $count ; $i++){
- $value = $word[$i];
- //跳过没用的数据
- if (strpos($value,'.') !== false){
- continue;
- }
- if (strpos($value,'/') !== false){
- continue;
- }
- if (in_array($value,['序号','项目名称','英文缩写','检查结果','单位','采集时间'])){
- continue;
- }
- if (strpos($value,'-') !== false){
- continue;
- }
- $value = preg_replace("/\\d+/",'', $value);
- $value = preg_replace("/\s*(\w+#?)/i",'', $value);
- foreach (self::$mustExtractEntity as $item){
- //匹配实体
- if (empty($value)){
- continue;
- }
- $valueCount = mb_strpos($value,$item['entity']);
- if ($valueCount !== false){
- $temp = array_slice($word,$i,6);
- if (count($temp) < 6){
- $temp = array_pad($temp,6,'');
- }
- $tempValue = '';
- $tempRange = '';
- if (preg_match('/\d+$/',$temp[1]) && preg_match("/-|~/",$temp[1]) == 0){
- $tempValue = $temp[1];
- }elseif (preg_match('/\d+$/',$temp[2]) && preg_match("/-|~/",$temp[2]) == 0){
- $tempValue = $temp[2];
- }elseif (preg_match('/\d+$/',$temp[3]) && preg_match("/-|~/",$temp[3]) == 0){
- $tempValue = $temp[3];
- }elseif (preg_match('/\d+$/',$temp[4]) && preg_match("/-|~/",$temp[4]) == 0){
- $tempValue = $temp[4];
- }elseif (preg_match('/\d+$/',$temp[5]) && preg_match("/-|~/",$temp[5]) == 0){
- $tempValue = $temp[5];
- }
- if (preg_match('/\d+-|~+\d+/',$temp[2])){
- $tempRange = $temp[2];
- }elseif (preg_match('/\d+-|~+\d+/',$temp[3])){
- $tempRange = $temp[3];
- }elseif (preg_match('/\d+-|~+\d+/',$temp[4])){
- $tempRange = $temp[4];
- }elseif (preg_match('/\d+-|~+\d+/',$temp[5])){
- $tempRange = $temp[5];
- }
- if (empty($tempValue) || empty($tempRange)){
- continue;
- }else{
- $tempRange = preg_replace("/[a-z]*\/[a-z]*/i",'', $tempRange);
- if(!is_numeric($tempValue)){
- continue;
- }
- if (!isset($data[$item['code']])){
- $data[$item['code']] = [
- 'entity' => $item['entity'],
- 'value' => $tempValue,
- 'range' => $tempRange,
- 'code' => $item['code']
- ];
- }
- }
- }else{
- continue;
- }
- }
- }
- return $data;
- // $ocr['calculation'] = json_encode($data);
- // $array = array_column($data,'symptom');
- // $tem = [];
- // foreach ($array as $item){
- // $tem = array_merge($item,$tem);
- // }
- // $tem = array_count_values($tem);
- // $symptom = '';
- // foreach ($tem as $key=>$value){
- // $symptom .= $key." + ".$value.'; ';
- // }
- // Ocr::query()->insert($ocr);
- // return ['list'=>$data,'symptom'=>$symptom];
- }
- public static function run($filePath)
- {
- //10.jpg 18.png w1.jpeg w2.jpeg w3.png w66.jpeg w77.png w222.jpeg WechatIMG6.jpeg
- $image = file_get_contents($filePath);///
- $image = base64_encode($image);
- $token = self::getAccessToken();
- $curl = curl_init();
- curl_setopt_array($curl, array(
- CURLOPT_URL => "https://aip.baidubce.com/rest/2.0/ocr/v1/medical_report_detection?access_token=$token",
- CURLOPT_TIMEOUT => 30,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_SSL_VERIFYPEER => false,
- CURLOPT_SSL_VERIFYHOST => false,
- CURLOPT_CUSTOMREQUEST => 'POST',
- CURLOPT_POSTFIELDS => http_build_query(array(
- 'location' => 'false',
- 'probability' => 'false',
- 'image' => $image
- )),
- CURLOPT_HTTPHEADER => array(
- 'Content-Type: application/x-www-form-urlencoded',
- 'Accept: application/json'
- ),
- ));
- $response = curl_exec($curl);
- curl_close($curl);
- return $response;
- }
- /**
- * 使用 AK,SK 生成鉴权签名(Access Token)
- * @return string 鉴权签名信息(Access Token)
- */
- private static function getAccessToken()
- {
- $curl = curl_init();
- $postData = array(
- 'grant_type' => 'client_credentials',
- 'client_id' => env('API_KEY'),
- 'client_secret' => env('SECRET_KEY')
- );
- curl_setopt_array($curl, array(
- CURLOPT_URL => 'https://aip.baidubce.com/oauth/2.0/token',
- CURLOPT_CUSTOMREQUEST => 'POST',
- CURLOPT_SSL_VERIFYPEER => false,
- CURLOPT_SSL_VERIFYHOST => false,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_POSTFIELDS => http_build_query($postData)
- ));
- $response = curl_exec($curl);
- curl_close($curl);
- $rtn = json_decode($response);
- return $rtn->access_token;
- }
- }
|