Bước 1: Tải Visual Studio
Bước 2: Cài đặt Python and C++ Development Environments in Visual Studio
Bước 3: Cài đăt CMake
Bước 4: Cài đặt open cv
pip install opencv-python
Bước 1: Tải Visual Studio
Bước 2: Cài đặt Python and C++ Development Environments in Visual Studio
Bước 3: Cài đăt CMake
Bước 4: Cài đặt open cv
pip install opencv-python
Bước 1: Install postgresql từ Dockerfile
FROM postgres:10.6
MAINTAINER nikhil baby <nikhil_baby@hotmail.com>
RUN apt-get update && apt-get install -y build-essential curl postgresql-server-dev-10
RUN curl https://ftp.postgresql.org/pub/source/v10.6/postgresql-10.6.tar.bz2 -o /postgresql-10.6.tar.bz2
RUN cd / && tar xvf postgresql-10.6.tar.bz2
RUN cd /postgresql-10.6/contrib/cube && sed -i 's/#define CUBE_MAX_DIM (100)/#define CUBE_MAX_DIM (128)/' cubedata.h && \
USE_PGXS=true make && USE_PGXS=true make install
Bước 2: Tạo extension cube và tạo bảng
CREATE EXTENSION CUBE
CREATE TABLE images (name text, vector cube);
Bước 3: Chuyển khuôn mặt thành định dạng vector 128d sử dụng face_recognition và lưu vào db
image = face_recognition.load_image_file(pathImg)
conn = psycopg2.connect(host="localhost",database="postgres", user="postgres", password="mysecretpassword")
face_encoding = face_recognition.face_encodings(image)[0]
face_encoding_string = ""
name='abc'
for distance in face_encoding:
face_encoding_string+=str(distance)
face_encoding_string+=str(",")
face_encoding_string = face_encoding_string[:-1]
print(face_encoding_string)
cur = conn.cursor()
cur.execute("INSERT INTO images (name, vector) VALUES (name, '"+face_encoding_string+"')");
Bước 4: Tìm kiếm ảnh trong db
conn = psycopg2.connect(host="localhost",database="postgres", user="postgres", password="mysecretpassword")
image = face_recognition.load_image_file(pathFileSearch)
face_encoding = face_recognition.face_encodings(image)[0]
face_encoding_string = ""
for distance in face_encoding:
face_encoding_string+=str(distance)
face_encoding_string+=str(",")
face_encoding_string = face_encoding_string[:-1]
tempstring = "SELECT name FROM images ORDER BY vector<-> cube(array["+face_encoding_string+"]) LIMIT 1"
cur = conn.cursor()
cur.execute(tempstring)
print(cur.fetchall())
conn.commit()
conn.close()
create directory MY_DIR as '/home/oracle/exp';
/* Example
begin
as_xlsx.clear_workbook;
as_xlsx.new_sheet;
as_xlsx.cell( 5, 1, 5 );
as_xlsx.cell( 3, 1, 3 );
as_xlsx.cell( 2, 2, 45 );
as_xlsx.cell( 3, 2, 'Anton Scheffer', p_alignment => as_xlsx.get_alignment( p_wraptext => true ) );
as_xlsx.cell( 1, 4, sysdate, p_fontId => as_xlsx.get_font( 'Calibri', p_rgb => 'FFFF0000' ) );
as_xlsx.cell( 2, 4, sysdate, p_numFmtId => as_xlsx.get_numFmt( 'dd/mm/yyyy h:mm' ) );
as_xlsx.cell( 3, 4, sysdate, p_numFmtId => as_xlsx.get_numFmt( as_xlsx.orafmt2excel( 'dd/mon/yyyy' ) ) );
as_xlsx.cell( 5, 5, 75, p_borderId => as_xlsx.get_border( 'double', 'double', 'double', 'double' ) );
as_xlsx.cell( 2, 3, 33 );
as_xlsx.hyperlink( 1, 6, 'http://www.amis.nl', 'Amis site' );
as_xlsx.cell( 1, 7, 'Some merged cells', p_alignment => as_xlsx.get_alignment( p_horizontal => 'center' ) );
as_xlsx.mergecells( 1, 7, 3, 7 );
for i in 1 .. 5
loop
as_xlsx.comment( 3, i + 3, 'Row ' || (i+3), 'Anton' );
end loop;
as_xlsx.new_sheet;
as_xlsx.set_row( 1, p_fillId => as_xlsx.get_fill( 'solid', 'FFFF0000' ) ) ;
for i in 1 .. 5
loop
as_xlsx.cell( 1, i, i );
as_xlsx.cell( 2, i, i * 3 );
as_xlsx.cell( 3, i, 'x ' || i * 3 );
end loop;
as_xlsx.query2sheet( 'select rownum, x.*
, case when mod( rownum, 2 ) = 0 then rownum * 3 end demo
, case when mod( rownum, 2 ) = 1 then ''demo '' || rownum end demo2 from dual x connect by rownum <= 5' );
as_xlsx.save( 'MY_DIR', 'my.xlsx' );
end;
--
begin
as_xlsx.clear_workbook;
as_xlsx.new_sheet;
as_xlsx.cell( 1, 6, 5 );
as_xlsx.cell( 1, 7, 3 );
as_xlsx.cell( 1, 8, 7 );
as_xlsx.new_sheet;
as_xlsx.cell( 2, 6, 15, p_sheet => 2 );
as_xlsx.cell( 2, 7, 13, p_sheet => 2 );
as_xlsx.cell( 2, 8, 17, p_sheet => 2 );
as_xlsx.list_validation( 6, 3, 1, 6, 1, 8, p_show_error => true, p_sheet => 1 );
as_xlsx.defined_name( 2, 6, 2, 8, 'Anton', 2 );
as_xlsx.list_validation
( 6, 1, 'Anton'
, p_style => 'information'
, p_title => 'valid values are'
, p_prompt => '13, 15 and 17'
, p_show_error => true
, p_error_title => 'Are you sure?'
, p_error_txt => 'Valid values are: 13, 15 and 17'
, p_sheet => 1 );
as_xlsx.save( 'MY_DIR', 'my.xlsx' );
end;
--
begin
as_xlsx.clear_workbook;
as_xlsx.new_sheet;
as_xlsx.cell( 1, 6, 5 );
as_xlsx.cell( 1, 7, 3 );
as_xlsx.cell( 1, 8, 7 );
as_xlsx.set_autofilter( 1,1, p_row_start => 5, p_row_end => 8 );
as_xlsx.new_sheet;
as_xlsx.cell( 2, 6, 5 );
as_xlsx.cell( 2, 7, 3 );
as_xlsx.cell( 2, 8, 7 );
as_xlsx.set_autofilter( 2,2, p_row_start => 5, p_row_end => 8 );
as_xlsx.save( 'MY_DIR', 'my.xlsx' );
end;
--
begin
as_xlsx.clear_workbook;
as_xlsx.new_sheet;
as_xlsx.setUseXf( false );
for c in 1 .. 10
loop
as_xlsx.cell( c, 1, 'COL' || c );
as_xlsx.cell( c, 2, 'val' || c );
as_xlsx.cell( c, 3, c );
end loop;
as_xlsx.freeze_rows( 1 );
as_xlsx.new_sheet;
for r in 1 .. 10
loop
as_xlsx.cell( 1, r, 'ROW' || r );
as_xlsx.cell( 2, r, 'val' || r );
as_xlsx.cell( 3, r, r );
end loop;
as_xlsx.freeze_cols( 3 );
as_xlsx.new_sheet;
as_xlsx.cell( 3, 3, 'Start freeze' );
as_xlsx.freeze_pane( 3,3 );
as_xlsx.save( 'MY_DIR', 'my.xlsx' );
end;
*/
Done!
declare
obj pljson;
list pljson_list;
begin
obj := pljson('
{
"a": null,
"b": 12.243,
"c": 2e-3,
"d": [true, false, "abdc", [1,2,3]],
"e": [3, {"e2":3}],
"f": {
"f2":true
}
}');
obj.print;
-- equivalent to print
dbms_output.put_line(obj.to_char);
-- print compact way
obj.print(false);
-- equivalent to print compact way
dbms_output.put_line(obj.to_char(false));
-- add to json object
obj.put('g', 'a little string');
-- remove from json object
obj.remove('g');
-- count of direct members in json object
dbms_output.put_line(obj.count);
-- test if an element exists
if not obj.exist('json is good') then
obj.put('json is good', 'Yes!');
if obj.exist('json is good') then
obj.print;
dbms_output.put_line(':-)');
end if;
end if;
-- you can build lists (arrays) too
-- however notice that we have to use the 'to_json_value' function on json objects
list := pljson_list(); --fresh list;
list.append(pljson('{"lazy construction": true}').to_json_value);
list.append(pljson_list('[1,2,3,4,5]'));
list.print;
-- empty list and nested lists are supported
list := pljson_list('[1,2,3,[3, []]]');
list.print;
-- count of direct members in json list
dbms_output.put_line(list.count);
-- you can also put json object or json lists as values
obj.put('nested json', pljson('{"lazy construction": true}'));
obj.put('an array', pljson_list('[1,2,3,4,5]'));
obj.print;
-- support for dates
obj.put('a date', pljson_ext.to_json_value(to_date('2017-10-21', 'YYYY-MM-DD')));
-- and convert it back
dbms_output.put_line(pljson_ext.to_date(obj.get('a date')));
obj := pljson(
'{
"a" : true,
"b" : [1,2,"3"],
"c" : {
"d" : [["array of array"], null, { "e": 7913 }]
}
}');
-- get elements using a json path expression
-- pljson supports a simple dot path expression and '[n]' for arrays
-- it never raises an exception (null is returned instead)
-- arrays are 1-indexed
-- the empty string as path returns the entire json object
-- can 'get_string', 'get_number', etc.
dbms_output.put_line(pljson_ext.get_number(obj, 'c.d[3].e'));
-- all pljson_... objects are copies
-- so modification in place is difficult
-- but put with path can do it
pljson_ext.put(obj, 'c.d[3].e', 123);
obj.print;
-- if you provide an invalid path then an error is raised
-- you can, however, specify a path that doesn't exists but should be created
-- arrays are 1-indexed.
-- gaps will be filled with json null(s)
obj := pljson();
pljson_ext.put(obj, 'a[2].data.value[1][2].myarray', pljson_list('[1,2,3]'));
obj.print;
-- fill the holes
pljson_ext.put(obj, 'a[1]', 'filler1');
pljson_ext.put(obj, 'a[2].data.value[1][1]', 'filler2');
obj.print;
-- replace larger structures:
pljson_ext.put(obj, 'a[2].data', 7913);
obj.print;
obj := pljson(
'{
"a" : true,
"b" : [1,2,"3"],
"c" : {
"d" : [["array of array"], null, { "e": 7913 }]
}
}');
obj.print;
-- remove element
pljson_ext.remove(obj, 'c.d[3].e');
obj.print;
-- remove array of array
pljson_ext.remove(obj, 'c.d[1]');
obj.print;
-- remove null element
pljson_ext.remove(obj, 'c.d[1]');
obj.print;
-- you can ignore check for duplicate keys
obj := pljson();
-- enables fast construction without checks for duplicate keys
obj.check_duplicate(false);
for i in 1 .. 10 loop
obj.put('a'||i, i);
end loop;
obj.put('a'||5, 'tada');
obj.print;
obj.check_duplicate(true);
-- fix possible duplicates but does not preserve order
obj.remove_duplicates();
obj.print;
-- create json objects and lists from sql statements
list := pljson_dyn.executeList('select * from tab');
list.print;
obj := pljson_dyn.executeObject('select * from tab');
obj.print;
end;
/
okie done;
sql>alter system set encryption key identified by "walletPassword123456";
sql>select * from v$encryption_wallet;
sql>alter system set encryption wallet open identified by "walletPassword123456";Cấu hình auto login giúp wallet luôn được open. Ta sử dụng orapki để cấu hình auto login. 1 file cwallet.sso sẽ được tạo ra trong thư mục
sql>orapki wallet create -wallet /home/oracle/wallet -auto_login
sql>alter system set encryption wallet close identified by "walletPassword123456";
sql>alter table accounts modify (ssn encrypt);
sql>alter table accounts modify (ssn encrypt using 'AES128');
sql>alter table account modify (ssn decrypt);
sql>alter table accounts modify (ssn encrypt no salt);